hsntngr / laravel-repository
laravel应用的仓储模式
1.0.0
2019-02-26 15:49 UTC
Requires
- php: ^7.1
- illuminate/support: ~5.5.0|~5.6.0|~5.7.0
This package is auto-updated.
Last update: 2024-09-27 22:11:23 UTC
README
laravel的简单仓储模式
保持模型和控制器整洁
安装
使用composer安装。
composer require hsntngr/laravel-repository
在config/app.php的providers中添加仓库服务提供者
'providers' => [ // ... Hsntngr\Repository\ServiceProvider::class ];
发布配置文件。
php artisan vendor:publish --provider="Hsntngr\Repository\ServiceProvider::class" --tag="config"
然后调整你的 App\Http\Controllers\Controller
类以在所有控制器中使用仓库管理器。通过仓库管理器,你可以在任何地方实例化任何仓库
// ... 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}
用法
使用 make:repository Model
命令创建新的仓库。
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
示例
# PostController public function show($id) { $post = $this->rm->post->findPublishedPost($id); return view("posts.single",compact("post")); }
如果你想要缓存结果,使用 cache() & repository()
方法
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")); }
使用 repository()
助手在控制器外部实例化任何仓库
repository("post")->findPublishedPost($id);
要列出仓库,使用 repository:list
命令
php artisan repository:list
// post -> PostRepository
// user -> UserRepository
// comment -> CommentRepository