咨询 / laravel-rule-repository
一个允许将规则(例如验证规则)附加到模型上的包。
0.3.0
2022-10-14 11:23 UTC
Requires
- php: ^7.0||^8.0
Requires (Dev)
- orchestra/testbench: ^3.4||^4.0||^5.0||^6.0||^7.0
- phpunit/phpunit: ^8.0
This package is auto-updated.
Last update: 2024-09-14 15:27:16 UTC
README
一个允许将规则(例如验证规则)附加到模型上的包,同时避免在模型本身或控制器中存储它们。
安装
通过Composer安装
composer require konsulting/laravel-rule-repository
用法
每个需要验证的模型都应该为其附加一个自己的验证仓库,其中包含默认验证规则以及可选的不同状态下的验证规则。例如,在更新模型时可能需要与创建模型时不同的验证规则。
创建仓库
验证仓库必须实现Contracts\RuleRepository
,因此必须包含一个返回默认规则的数组的方法default()
。它还可以包含任何数量的'状态'方法,其中包含不同的规则。
注意
- 状态方法名称应使用驼峰命名法。
- 当检索时,状态特定的规则将与默认规则(非递归)合并。
扩展AbstractRepository
类
AbstractRepository
类提供了一些辅助函数,使定义规则更加容易。可以扩展此类而不是直接实现接口。
有时需要将规则追加或预置到现有规则列表中,例如,仅在新创建的模型中使值成为必需。这可以通过以下方法实现
AbstractRepository::prependRule(string $rule, array $baseRules); AbstractRepository::prependRules(array $rules, array $baseRules); AbstractRepository::appendRule(string $rule, array $baseRules); AbstractRepository::appendRules(array $rules, array $baseRules);
示例仓库
use Konsulting\Laravel\RuleRepository\AbstractRepository; class UserRuleRepository extends AbstractRepository { public function default() : array { return [ 'name' => 'string', 'email' => 'string|email', 'date_of_birth' => 'date', ]; } public function create() : array { return $this->prependRule('required', $this->default()); } }
将仓库附加到模型
附加规则到的模型应使用RuleRepositoryTrait
特质。建议(但不是必需)模型实现接口Contracts\HasRuleRepositories
。
静态属性$ruleRepositories
应初始化为一个关联数组,其中包含仓库类路径,仓库名称作为键。
use Konsulting\Laravel\RuleRepository\Contracts\HasRuleRepository; use Konsulting\Laravel\RuleRepository\RuleRepositoryTrait; class User extends Model implements HasRuleRepository { use RuleRepositoryTrait; protected static $ruleRepositories = [ 'validation' => UserValidationRepository::class; ]; }
检索验证规则
可以使用静态方法getRules($name, $state = 'default')
检索模型的验证规则。
返回验证仓库的默认规则
User::getRules('validation'); // or User::getRules('validation', 'default');
获取特定状态的规则
User::getRules('validation', 'update'); User::getRules('validation', $state);
状态名称可以使用驼峰命名法或蛇形命名法。
使用魔法方法
还可以将RepositoryMagicMethods
特质添加到模型中,以允许使用更简洁的语法检索规则。可以使用以下方法检索规则
Model::{$repositoryName . 'Rules'}($state = 'default');
例如
User::validationRules(); User::validationRules('update');