okipa/laravel-base-repository

此包已被废弃,不再维护。没有建议的替代包。

一个具有预定义常见功能的抽象基仓库。

1.1.9 2018-11-12 16:31 UTC

This package is auto-updated.

Last update: 2022-02-01 13:11:53 UTC


README

一个具有预定义常见功能的抽象基仓库。

Source Code Latest Version Total Downloads License: MIT Build Status Code Coverage Scrutinizer Code Quality

开始前

仓库模式有几个目标

  • 鼓励开发良好的实践(关注点分离、代码可复用性、...)
  • 提高代码的可测试性

在使用此包之前,您应该熟悉仓库模式,尤其是它的Laravel实现。
您可以通过阅读互联网上关于此的几篇文章来了解更多信息。
以下是一个例子:https://medium.com/@jsdecena/refactor-the-simple-tdd-in-laravel-a92dd48f2cdd.

注意

  • 此基础仓库不允许您直接操作模型:有时可能会诱惑您直接从控制器中操作模型,但这是不推荐且被视为不良实践的。
  • 您应该始终填充您的仓库接口:它可以在您的项目中避免巨大的错误。
  • 提供的方法是快捷方式,以避免您在您自己的基础仓库或多个仓库中声明它们。请记住,它们只是预定义的方法,您应该在您的仓库中声明新方法,如果它们不符合您的需求。

安装

仓库模式的设置并不复杂,但需要完成几个步骤。
逐一执行它们

  • 使用composer安装包
composer require okipa/laravel-base-repository
  • 创建一个app/Repositories目录,您将在此处存储您不同的项目仓库。

  • 创建您的app/Repositories/BaseRepositoryInterface.php接口和您的app/Repositories/BaseRepository.php抽象类

<?php

namespace App\Repositories;

interface BaseRepositoryInterface extends Okipa\LaravelBaseRepository\BaseRepositoryInterface
{
    // add here your own custom method contracts (if necessary).
    // they will be implemented in all your repositories.
}
<?php

namespace App\Repositories;

abstract class BaseRepository extends Okipa\LaravelBaseRepository\BaseRepository implements BaseRepositoryInterface
{
    // add here your own custom method declarations (if necessary).
    // they will be implemented in all your repositories.
}
  • 创建第一个UserRepositoryInterface及其关联的UserRepository
<?php

namespace App\Repositories\Users;

interface UserRepositoryInterface
{
    // add here the users method contracts.
    /**
     * @return void
     */
    public function test();
}
<?php

namespace App\Repositories\Users;

use App\Repositories\BaseRepository;
use App\Models\User;

class UserRepository extends BaseRepository implements UserRepositoryInterface
{
    protected $model = User::class;

    // add here the users method declarations.
    public function test()
    {
        \Log::info('test');
        // manipulate your model as needed. Example : $this->model->create(['email' => 'whatever@email.test']);
    }
}
  • 创建您的项目app/Providers/RepositoryServiceProvider.php文件。您可以根据以下示例进行操作
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\User\UserRepositoryInterface;

class RepositoryServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        // users
        $this->app->bind(UserRepositoryInterface::class, UserRepository::class);

        // then, register all your other repositories here ...
    }
}
  • 将您的RepositoryServiceProvider添加到Laravel框架的提供者声明中,在config/app.php
// ...

'providers' => [
    // other provider declarations ...

    // custom providers
    App\Providers\RepositoryServiceProvider::class,
],

// ...
  • 将一个$repository属性添加到您的app/Http/Controllers/Controller.php基础控制器中,您的所有控制器都将扩展它
<?php

namespace App\Http\Controllers;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    protected $repository;
}

完成!
现在,您可以使用拥有此包提供的预定义方法的UserRepository了。

使用方法

在您的app/Http/Controllers/Users/UsersController.php中,像下面这样操作您的UserRepository

<?php

namespace App\Http\Controllers\Users;

use App\Http\Controllers\Controller;
use App\Repositories\Users\UserRepositoryInterface;

class UsersController extends Controller
{
    /**BaseRepositoryInterface
     * UsersController constructor.
     *
     * @param \App\Repositories\Users\UserRepositoryInterface $repository
     */
    public function __construct(UserRepositoryInterface $repository)
    {
        parent::__construct();
        $this->repository = $repository;
    }

    /**
     * @param IndexUserRequest $request
     *
     * @return void
     */
    public function index(IndexUserRequest $request)
    {
        // execute your repository custom methods
        $this->repository->test();
        // execute this package methods
        $allStoredUsers = $this->repository->getAll();
    }

API

属性

BaseRepository中查看可以重写的受保护属性。

公共方法

BaseRepositoryInterface中查看可用的公共方法。

测试

composer test

变更日志

请参阅变更日志获取最近更改的更多信息。

贡献者

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。