lanidev / repository-pattern
Laravel 包,通过仓库模式进行改进
dev-master
2019-05-02 00:01 UTC
This package is auto-updated.
Last update: 2024-09-29 05:08:53 UTC
README
Laravel 包,通过使用仓库模式改进框架。此包将为您提供一些新的代码生成命令,而仓库模式将使您的应用程序更容易维护。
安装
从您的终端运行以下命令
composer require lanidev/repository-pattern
配置
从您的终端运行以下命令
php artisan vendor:publish --provider="Lanidev\Pattern\Providers\ConfigServiceProvider"
这将生成一个文件: config/pattern.php
在此文件中,您可以修改文件生成器中模型和仓库的命名空间
return [ 'namespace' => [ 'model' => 'App', 'repository' => 'App\Repositories' ] ];
控制台使用
此包提供 php artisan make:model 命令的更新版本,并添加了一个新选项: --repository
推荐方法
从您的终端运行以下命令
php artisan make:model Page --repository
这将生成一个在配置文件中选择命名空间下的经典模型
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Page extends Model { // }
通过使用 --repository 选项,您将为给定模型生成一个仓库
<?php namespace App\Repositories; use Lanidev\Pattern\Repositories\EloquentRepository as Repository; class PageRepository extends Repository { /** * The repository model * * @var string */ protected $model = 'Page'; }
变量 $model 告诉包由生成的仓库管理哪个模型
注意:不需要指定模型的命名空间,因为它将被自动检测。
替代方法
有些人喜欢使用反向逻辑,例如当模型已经存在时
因此,该包允许您这样做。
从您的终端运行以下命令
php artisan make:repository PageRepository --model=Page
这将生成与之前显示相同的仓库文件。在这种情况下,使用了 --model= 选项来指定 $model 变量。
如果您不指定此选项,它将生成一个空的 $model 变量的仓库文件,因此您需要手动填写。
如果您指定了一个不在配置文件中选择的命名空间中的模型,则终端将要求您创建它。
仓库使用
对于此示例
您可以创建一个控制器并使用仓库作为依赖注入
<?php namespace App\Http\Controllers; use App\Repositories\PageRepository as Page; class PageController extends Controller { private $pages; public function __construct(Page $pages) { $this->pages = $pages; } public function index() { // your code } }
可用方法
以下 BREAD 方法可用
Lanidev\Pattern\Contracts\RepositoryInterface
public function browse($columns = array('*')) public function read($field, $value, $columns = array('*')) public function add(array $data) public function edit(array $data, $id) public function delete($id) public function paginate($perPage = 15, $columns = array('*'));
示例使用
列出所有页面
$this->pages->browse();
创建新页面
$this->pages->add(Input::all());
更新现有页面
$this->pages->edit(Input::all(), $id);
删除现有页面
$this->pages->delete($id);
根据单列标准获取单行。
$this->pages->read('slug', $slug);