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);

注意:对于浏览、读取和分页方法,您可以通过传递一个数组作为参数来指定要获取的列