okipa / laravel-base-repository
此包已被废弃,不再维护。没有建议的替代包。
一个具有预定义常见功能的抽象基仓库。
1.1.9
2018-11-12 16:31 UTC
Requires
- php: >=7.0
- illuminate/support: ~5.0
Requires (Dev)
- mockery/mockery: ^1.1
- orchestra/testbench: ^3.6
- squizlabs/php_codesniffer: ^3.3
README
一个具有预定义常见功能的抽象基仓库。
开始前
仓库模式有几个目标
- 鼓励开发良好的实践(关注点分离、代码可复用性、...)
- 提高代码的可测试性
在使用此包之前,您应该熟悉仓库模式,尤其是它的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)。请参阅许可证文件获取更多信息。