Проверка Laravel: групповая проверка

Я пытаюсь добавить проверку в Средство проверки запроса для группы полей, чтобы убедиться, что группа полей не превышает определенную сумму. После того, как пользователь отправляет свою форму , они могут просматривать ее в формате pdf, и моя цель состоит в том, чтобы убедиться, что коллекцияf_name, m_nameи l_nameне запустить в другую группу текста на pdf (таким образом, делая его неразборчивым).

По сути, я хочу что-то вроде этого:

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

Я искал повсюду, но единственные вопросы, которые я могу найти, связаны просто как сделать проверку. Если кто-то знает, как группировать значения в проверке или ссылки на ранее заданные вопросы, пожалуйста, дайте мне знать. Спасибо товарищам.

2 ответа

  1. 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;
    }
    
  2. Для добавления нескольких полей необходим пользовательский валидатор.
    В вашем 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'