109. 让验证规则可以复用 —— illuminatech/validation-composite
让验证规则可以复用 —— illuminatech/validation-composite
illuminatech/validation-composite 是一个可以让验证规则可以复用的扩展包。
安装
$ composer require --prefer-dist illuminatech/validation-composite
使用
基础使用
routes/api.php
Route::post('login', function(Request $request) {
$request->validate([
'password' => ['required', 'string', 'min:6', 'max:20', 'alpha_num'],
]);
return $request->all();
});
当我们需要输入密码的时候,都需要,例如修改密码,忘记密码等等,为了让代码能够复用,这样规则变动的之后可以统一修改。可以利用 Laravel 提供的自定义验证规则。
默认情况下我们需要完成 pass 方法,来自定义如何验证,扩展包只是在基础的最类中做了补充,可以使用一组已存在的现有规则,也就是把 password 相关的一组规则放在一个自定义验证类中。
$ php artisan make:rule PasswordRule
app/Rules/PasswordRule.php
<?php
namespace App\Rules;
use Illuminatech\Validation\Composite\CompositeRule;
class PasswordRule extends CompositeRule
{
protected function rules(): array
{
return ['string', 'min:6', 'max:20', 'alpha_num'];
}
}
routes/api.php
use App\Rules\PasswordRule;
.
.
.
Route::post('login', function(Request $request) {
$request->validate([
'password' => ['required', new PasswordRule],
]);
return $request->all();
});
所有关于密码的验证只需要 new PasswordRule
就可以了。还可以手动修改一下报错信息。
app/Rules/PasswordRule.php
.
.
.
public function message()
{
return '密码格式错误';
}
}
另一种使用方式
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Contracts\Validation\Factory;
use Illuminatech\Validation\Composite\DynamicCompositeRule;
class AppServiceProvider extends ServiceProvider
{
.
.
.
public function boot()
{
$this->app->extend('validator', function (Factory $validatorFactory) {
$validatorFactory->extend('password', function ($attribute, $value) {
return (new DynamicCompositeRule(['string', 'min:6', 'max:20', 'alpha_num']))->passes($attribute, $value);
});
return $validatorFactory;
});
}
}
这么使用的话需要去语言文件中定义一下字段
resources/lang/en/validation.php
.
.
.
'password' => 'The password is invalid.',
.
.
,