109. 让验证规则可以复用 —— illuminatech/validation-composite

让验证规则可以复用 —— illuminatech/validation-composite

illuminatech/validation-composite 是一个可以让验证规则可以复用的扩展包。

安装

$ composer require --prefer-dist illuminatech/validation-composite

109. 让验证规则可以复用 —— 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.',
.
.
,

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
发起讨论 只看当前版本


暂无话题~