gabrieljmj / laravel-rule-sets
通过请求避免重复规则集。
v1.2.0
2021-01-13 17:50 UTC
Requires
- php: >=7.2
Requires (Dev)
- phpunit/phpunit: 8.4
This package is auto-updated.
Last update: 2024-09-14 02:30:21 UTC
README
避免重复验证规则集。使用此库可以在集合之间共享规则,并通过请求重用集合。
安装
Composer
执行以下命令
composer require gabrieljmj/laravel-rule-sets
对于Laravel 5.5之前的版本
需要在config/app.php的提供者列表中添加服务提供者
Gabrieljmj\LaravelRuleSets\Providers\RuleSetsServiceProvider::class,
使用方法
该包提供了 artisan 命令make:rule-set。它将在命名空间App\Rules\RuleSets下生成一个 RuleSet。
artisan make:rule-set UserRuleSet
在集合的受保护方法rules中添加必要的规则。
<?php namespace App\Rules\RuleSets; use Gabrieljmj\LaravelRuleSets\AbstractRuleSet; class UserRuleSet extends AbstractRuleSet { protected function rules(): array { return [ 'username' => 'required', 'email' => 'required|email', 'password' => 'required|min:8|confirmed', ]; } }
然后您现在可以将它注入到请求的rules方法中。
<?php namespace App\Http\Requests; use Illuminate\Foundation\Http\FormRequest; use App\Rules\RuleSets\UserRuleSet; class UserRequest extends FormRequest { // ... public function rules(UserRuleSet $userRules) { return $userRules->getRules(); } }
组合规则集
combineWithRules(array $rules)
此方法将用于将规则注入到规则集对象中。
注意:同名规则将被新规则覆盖。
use App\Rules\RuleSets\UserRuleSet; use App\Rules\RuleSets\PasswordRuleSet; // ... public function rules(UserRuleSet $userRules, PasswordRuleSet $passwordRuleSet) { return $userRules ->combineWith([$passwordRuleSet]) ->getRules(); }
$combineWith
一个数组,其中包含将在getRules执行期间注入到规则集合中的集合。
<?php namespace App\Rules\RuleSets; use Gabrieljmj\LaravelRuleSets\AbstractRuleSet; class PersonRuleSet extends AbstractRuleSet { protected function rules(): array { return [ 'name' => 'required', ]; } }
<?php namespace App\Rules\RuleSets; use Gabrieljmj\LaravelRuleSets\AbstractRuleSet; class UserRuleSet extends AbstractRuleSet { public function __construct(PersonRuleSet $personRuleSet) { // Adds other rule set $this->combineWith[] = $personRuleSet; } protected function rules(): array { return [ 'email' => 'required|email', 'password' => 'required|min:8|confirmed', ]; } }
$userRuleSet->getRules(); // ['email' => '...', 'password' => '...', 'name' => '...']
覆盖规则
有时两个集合将为输入提供一个规则。首选的将是组合的集合中的规则。如果需要,只需将集合的受保护属性$overrideRules设置为true即可覆盖规则。
<?php namespace App\Rules\RuleSets; use Gabrieljmj\LaravelRuleSets\AbstractRuleSet; class UserRuleSet extends AbstractRuleSet { protected $overrideRules = true; public function __construct(PersonRuleSet $personRuleSet) { $this->combineWith[] = $personRuleSet; } protected function rules(): array { return [ 'email' => 'required|email', 'password' => 'required|min:8|confirmed', 'name' => 'required|length:25', ]; } }