hsntngr / laravel-repository
Repository pattern for laravel applications
Requires
- php: ^7.1
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0
This package is auto-updated.
Last update: 2025-05-27 23:33:20 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