Laravel验证:分组验证


Laravel Validation: grouped validation

我正试图将验证添加到一组字段的请求验证器中,以确保该组字段不超过一定数量。一旦用户提交了他们的表格,他们就可以以pdf格式查看,我的目标是确保f_namem_namel_name的集合不会遇到pdf上的另一组文本(从而使其难以辨认)。

本质上,我想要这样的东西:

public function rules()
{
  return [
    'f_name' + 'm_name' + 'l_name' => 'max:50',
    ...
  ];
}

我到处都找过了,但我能找到的唯一相关问题只是如何进行验证。如果有人知道如何将验证中的值分组或链接到以前提出的问题,请告诉我。谢谢各位。

Laravel不支持使用一个规则堆栈进行多字段验证。尝试编写自定义验证器或重新发明轮子:
public function rules()
{
    $fields = [
        "max: 50" => ["f_name", "m_name", "l_name"]
    ];
    $rules = [];
    foreach($fields as $rule => $fieldArray){
        if(is_array($fieldArray)){
            foreach($fieldArray as $field){
                $rules[$field] = $rule; 
            } 
        }
    }
  return $rules;
}

您需要一个自定义验证器,以便添加多个字段。在您的AppServiceProvider中,类似于以下内容:

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Validator::extend('groupedFieldsLongerThan50', function($attribute, $value, $parameters, $validator) {
            $f_name = array_get($this->data, $parameters[0]);
            $m_name = array_get($this->data, $parameters[1]);
            $l_name = array_get($this->data, $parameters[2]);
            if((strlen($f_name)+strlen($m_name)+strlen($l_name))<=50)
                  return true;
            return false;
        });
    }
    ...

在您声明规则的地方添加:

'f_name' => 'groupedFieldsLongerThan50:f_name,m_name,l_name'