wimski/laravel-model-repositories

v4.0.0 2024-03-15 08:35 UTC

This package is auto-updated.

Last update: 2024-09-23 11:32:41 UTC


README

Latest Stable Version Coverage Status PHPUnit PHPStan

Laravel模型仓库

为Laravel Eloquent模型提供通用仓库模式。

变更日志

查看变更日志。

使用方法

安装包

composer require wimski/laravel-model-repositories

设置服务提供者

此包使用包发现加载。您应该创建自己的服务提供者,该提供者扩展此包中的提供者,并将其手动添加到配置中。

app/Providers/RepositoryServiceProvider.php

<?php

namespace App\Providers;

use Wimski\ModelRepositories\Providers\ModelRepositoryServiceProvider;

class RepositoryServiceProvider extends ModelRepositoryServiceProvider
{
    protected array $repositories = [
        // add your repository bindings here
    ];
}

config/app.php

<?php

return [
    'providers' => [
        /*
         * Application Service Providers...
         */
         App\Providers\RepositoryServiceProvider::class,
    ],
];

生成仓库

php artisan make:repository App\\Models\\MyModel

这将创建以下文件

  • MyModelRepositoryInterface.php
  • MyModelRepository.php

命名空间和文件位置取决于命名空间配置

或者,您可以使用命令选项完全覆盖合同和仓库FQN。将跳过命名空间匹配和类名后缀。

php artisan make:repository App\\Models\\MyModel --contract=Foo\\Bar --repository=Lorem\\Ipsum

添加仓库绑定

服务提供者中设置您的新仓库的绑定。

protected array $repositories = [
    MyModelRespositoryInterface::class => MyModelRespository::class,
];

示例用法

class SomeService
{
    protected MyModelRespositoryInterface $repository;
    
    public function __construct(MyModelRespositoryInterface $repository)
    {
        $this->repository = $repository;    
    }
    
    public function doSomething($id): void
    {
        $myModel = $this->repository->findOrFail($id);
    }
}

发布配置文件

由于此包未注册自己的服务提供者,在发布此包的配置文件时应该引用您自己的服务提供者。

php artisan vendor:publish --provider=App\Providers\RepositoryServiceProvider

命名空间配置

命名空间配置用于确定您的仓库类 - 以及后续文件的位置 - 的命名空间。每个配置由三部分组成

  • models
  • contracts
  • repositories

当为模型生成仓库时,命令将查找具有匹配提供的模型的models部分的命名空间配置。然后使用该配置的contractsrepositories部分作为仓库类的命名空间。

假设

  • 命名空间遵循PSR-4文件位置约定。
  • 命名空间位于Laravel应用目录中。

默认配置

'namespaces' => [
    [
        'models'       => 'App\\Models',
        'contracts'    => 'App\\Contracts\\Repositories',
        'repositories' => 'App\\Repositories',
    ],
],

App\Models\MyModel生成仓库时,将创建以下两个类

  • App\Contracts\Repositories\MyModelRepositoryInterface
  • App\Repositories\MyModelRepository

多个配置

您可以有多个命名空间配置,例如在使用域时。

'namespaces' => [
    [
        'models'       => 'App\\DomainA\\Models',
        'contracts'    => 'App\\DomainA\\Contracts\\Repositories',
        'repositories' => 'App\\DomainA\\Repositories',
    ],
    [
        'models'       => 'App\\DomainB\\Models',
        'contracts'    => 'App\\DomainB\\Contracts\\Repositories',
        'repositories' => 'App\\DomainB\\Repositories',
    ],
],

具体性

将使用第一个匹配项,所以如果您有重叠的命名空间配置,请确保将更具体的配置放在顶部。

'namespaces' => [
    [
        'models' => 'App\\Models\\SpecificModels',
        ...
    ],
    [
        'models' => 'App\\Models',
        ...
    ],
],

可用方法

接口

存根定制

见Laravel关于存根定制的文档。此包添加以下存根文件

  • model.repository.interface.stub
  • model.repository.stub

PHPUnit

composer test

PHPStan

composer analyze

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件