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 网站上。

上一篇 下一篇
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 0
发起讨论 查看所有版本


暂无话题~