Laravel - 特定字段的永久验证

Laravel - Permanent validation for specific field

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

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

有什么办法吗?我浏览了所有 Laravel 文档,但没有找到任何方法。

也许一个好的方法是创建一个 UsesCommonRules 特征,其中包含一个名为 getCommonRules() 的方法,这将 return 一个包含规则的数组。

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'
        ]);
    }
}

您可以在 UsesCommonRules 特性中创建更多动态功能,例如接收参数以决定哪些规则应该 returned、排除,或者合并具有相同名称的字段的规则。