noitran / micro-repositories
laravel / lumen 项目的仓库包
v0.1.0
2019-02-13 20:32 UTC
Requires
- php: >=7.1
- illuminate/support: ~5.7
Requires (Dev)
- orchestra/testbench: ~3.4.2|~3.5.0|~3.6.0|~3.7.0
- phpunit/phpunit: ~7.0
This package is auto-updated.
Last update: 2024-09-29 05:08:46 UTC
README
关于
- 该包为laravel和lumen应用添加了对仓库设计模式的支持。这个包是从零开始创建的,因为其他版本的仓库模式包没有得到维护或者质量较差。欢迎贡献!
安装
- 作为composer包安装
$ composer require noitran/micro-repositories
Laravel
- Laravel使用提供者自动发现。可以使用命令发布配置文件
$ artisan vendor:publish --provider="Noitran\Repositories\ServiceProvider"
Lumen
- 打开您的bootstrap/app.php文件,将其注册为服务提供者
$app->register(Noitran\Repositories\ServiceProvider::class);
- 配置文件应在bootstrap/app.php中手动加载
$app->configure('repositories');
仓库
创建Eloquent模型
- 创建Eloquent模型,就像您最初做的那样。使用laravel生成器或手动创建。以下是我将使用的示例模型
<?php namespace App\Data\Models; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Relations\HasMany; class User extends Model { /** * The attributes that aren't mass assignable. * * @var array */ protected $guarded = [ 'id', ]; }
创建Eloquent仓库实现和仓库接口
- 首先,让我们创建我们的仓库接口
<?php namespace App\Data\Repositories\User; use Noitran\Repositories\Contracts\Repository\RepositoryInterface; /** * Interface UserRepository */ interface UserRepository extends RepositoryInterface { // }
- 第二步是创建仓库接口的实现。我们将扩展
SqlRepository
,它添加了对使用表名查询的支持。如果您使用jenssegers/laravel-mongodb
包,则您的仓库实现应扩展MongoRepository
类
<?php namespace App\Data\Repositories\User; use Noitran\Repositories\Repositories\SqlRepository; use App\Data\Models\User; /** * Class UserRepositoryEloquent */ class UserRepositoryEloquent extends SqlRepository implements UserRepository { /** * Specify Model class name. * * @return string */ public function getModelClassName(): string { return User::class; } /** * Boot up the repository, pushing criteria. */ public function boot(): void { // } }
- 在创建好仓库和接口后,它们应通过laravel IoC绑定来加载。最快的方法是将绑定添加到
App\Providers\AppServiceProvider
类中。
<?php namespace App\Providers; use Illuminate\Support\ServiceProvider; use App\Data\Repositories\User\UserRepository; use App\Data\Repositories\User\UserRepositoryEloquent; class AppServiceProvider extends ServiceProvider { /** * Register any application services. * * @return void */ public function register(): void { $this->app->bind(UserRepository::class, UserRepositoryEloquent::class); } }
过滤器
-
过滤器位于仓库之上,并使用标准来启用查询过滤功能,包括内置和/或自定义标准。
-
创建过滤器类很简单。示例
<?php namespace App\Data\Filters\User; use Noitran\Repositories\Filters\AbstractFilter; use App\Data\Repositories\User\UserRepository; class UserFilter extends AbstractFilter { /** * @var array */ protected $queryFilters = [ // List of custom Criteria filters ]; /** * UserFilter constructor. * * @param UserRepository $userRepository */ public function __construct(UserRepository $userRepository) { parent::__construct(); $this->setRepository($userRepository) ->setQueryFilters($this->queryFilters); } /** * @param array $requestAttributes * * @return mixed */ public function filter(array $requestAttributes) { $input = $this->getInput( $this->queryFilters, $requestAttributes ); $this->repository = $this->pushFilters($this->repository, $input); return $this; } }
- 创建完UserFilter后,您现在可以使用内置的过滤标准并添加自定义标准。过滤器作为HTTP请求和仓库之间的层,让您能够使用RQL(请求查询语言)、排序、分页等功能。
标准
@todo