fimaruf/laravel-repositories

Laravel 5+ 的仓库层

1.5.0 2017-04-06 16:14 UTC

README

使用 Laravel 框架的仓库

设置

本包通过 Laravel 容器进行依赖注入,将仓库注入到控制器或其他可能需要它们的类中。

注册服务提供者

将服务提供者添加到应用配置的 'providers' 部分。

'providers' => [
    ...
    CroudTech\Repositories\Providers\RepositoryServiceProvider::class,
    ...
],

如下将仓库定义添加到资源配置文件中

<?php
use \CroudTech\Repositories\TestApp\Repositories\Contracts\UserRepositoryContract;
use \CroudTech\Repositories\TestApp\Repositories\UserRepository;
use \CroudTech\Repositories\TestApp\Repositories\UserApiRepository;
use \CroudTech\Repositories\TestApp\Transformers\UserTransformer;
use \CroudTech\Repositories\TestApp\Controllers\UserController;
use \CroudTech\Repositories\TestApp\Controllers\UserApiController;

return [
    'repositories' => [
        UserRepositoryContract::class => UserRepository::class,
    ],

    'repository_transformers' => [
        UserRepository::class => UserTransformer::class,
        UserApiRepository::class => UserTransformer::class,
    ],

    'contextual_repositories' => [
        UserController::class => UserRepositoryContract::class,
        UserApiController::class => UserApiRepository::class,
    ],
];

'repositories' 定义了每个仓库合约的具体实现。

'repository_transformers' 定义了应该注入到每个仓库中的转换器类。

'contextual_repositories' 定义了上下文仓库。这在不同控制器需要同一合约的不同实现时很有用。

要指定控制器所需的仓库,只需将其合约或类名添加到控制器的构造方法中。

例如,要将 UserRespsitory 注入到 UserController 中

<?php
namespace App\Controllers;

use \CroudTech\Repositories\TestApp\Repositories\Contracts\UserRepositoryContract;

class UserController extends Controller
{
  protected $repository;

  public function __construct(UserRepositoryContract $user_repository)
  {
    $this->repository = $user_repository;
  }
}