hsntngr/laravel-repository

Repository pattern for laravel applications

1.0.0 2019-02-26 15:49 UTC

This package is auto-updated.

Last update: 2024-04-27 21:18:04 UTC


README

Simple repository pattern for laravel

Keep clean your models and controllers

Installation

Install via composer.

composer require hsntngr/laravel-repository

Register repository service provider by adding into providers in config/app.php

'providers' => [
    // ...
    Hsntngr\Repository\ServiceProvider::class
];

Publish configuration file.

php artisan vendor:publish --provider="Hsntngr\Repository\ServiceProvider::class" --tag="config"

Then adjust your App\Http\Controllers\Controller class to use repository manager in all controllers. With Repository Manager you will able to instantiate any repository in anywhere

// ...
use Hsntngr\Repository\IRepositoryManager;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected $rm;

    public function __construct(IRepositoryManager $rm)
    {
        $this->rm = $rm;
    }
}
//Now you can easly instantiate a repository with $this->rm->{repositoryKey}

Usage

Use make:repository Model command to create new repository.

php artisan make:repository User

// app/Repositories/UserRepository.php

// Also you may define custom alias to retrieve repository. By default it uses lower case model name 

php artisan make:repository PostTranslation --key=translate

Example

# PostController
public function show($id)
{
    $post = $this->rm->post->findPublishedPost($id);
    
    return view("posts.single",compact("post"));
}

If you want to cache results use cache() & repository() methods

public function show($id)
{
    $post = $this->rm->cache("post:".$id,3*60)
         ->repository("post",function($post) use ($id){
             return $post->findPublishedPost($id);
         });
    // if no minutes defined, it'll cache forever
    return view("posts.single",compact("post"));
}

Use repository() helper to instantiate any repository outside of the controller

repository("post")->findPublishedPost($id);

To list repositories, use repository:list command

php artisan repository:list

// post           ->  PostRepository
// user           ->  UserRepository
// comment        ->  CommentRepository