首页 > 解决方案 > Laravel - 特定字段的永久验证

问题描述

在我的网站上有很多地方我要求人们指定他们的电话号码或其他类型的数据。每个地方,验证规则都是相同的,并且在每个验证器中一遍又一遍地链接相同的验证规则并不那么漂亮,并且不利于验证规则的未来更新。想想看,例如,当我想更改电话号码验证规则时,我需要在每个表单验证器上更改它。

我知道我可以使用扩展添加自定义验证规则并添加一些正常的 php 条件以实现所需的验证,但这并不是我想要做的,因为我想使用几个 Laravel 验证,而不是添加验证我自己的。

有没有办法做到这一点?我浏览了所有 Laravel 文档,但没有找到任何方法可以做到这一点。

标签: phplaravellaravel-5php-7laravel-5.8

解决方案


也许一个好的方法是创建一个UsesCommonRules包含名为 的方法的 Trait,该方法getCommonRules()将返回一个包含规则的数组。

namespace App\Traits;

trait UsesCommonRules 
{
    public static function getCommonRules(){
        return [
            'date' => 'required|date',
            'type' => 'in:A,B'
        ];
    }
}

然后,您可以将任何其他规则与请求内的通用规则合并,如果您正在控制器中进行验证,则可以直接在控制器中合并。

namespace App\Http\Requests;

use App\Traits\UsesCommonRules;
use Illuminate\Foundation\Http\FormRequest;

class MyRequest extends FormRequest
{
    use UsesCommonRules;

    public function rules()
    {
        return array_merge(self::getCommonRules(), [
            'city_id' => 'required'
        ]);
    }
}

您可以在UsesCommonRulestrait 中创建更多动态函数,例如接收参数以指示应返回、排除哪些规则,或组合具有相同名称的字段的规则。


推荐阅读