Задать вопрос
@aassdds
Люблю борщ и PHP

Как правильно использовать custom validation rule в formRequest'е для более чем одного параметра?

Добрый день
Задаю этот вопрос не в первый раз - так как обычно не всегда получается донести что именно "не получается", поэтому извините за излишнюю подробность
Использую Laravel v5.8

Есть форма с которой приходят 3 параметра A,B,C
Для стандартной валидации обычно привык использовать FormRequest, и в данном случае он будет выглядеть примерно так:
public function rules()
    {
        return [
            'A'=>['required','min:2'],
            'B'=>['required','min:5'],
            'C'=>['required','email'],
        ];
    } // func

Далее, если мне надо проверить какое то поле на более сложную логику, которая не укладывается в стандартные правила, я создаю custom Rule и запихиваю туда эту самую логику - с этого момента в FormRequest'e метод валидации выглядит примерно так:
public function rules()
    {
        return [
            'A'=>['required','min:2', new CustomValidationRule],
            'B'=>['required','min:5'],
            'C'=>['required','email'],
        ];
    } // func

Как мы знаем - в CustomValidationRule есть метод passes в который передаются $attribute, $value - то есть все что надо для проверки поля A, но другие параметры туда не передаются

Моя ситуация - мне надо проверить не просто отдельно каждое поле на какую-то логику, а сразу все поля, что то типа если A=5 то B должно быть больше 22 а C должна быть мылом от gmail а не от mail.ru
Для начала я подумал про метод withValidator который можно описать в FormRequest и добавить туда проверки
Но если мне эта кастомная проверка понадобится еще в другом FormRequest'e - то получается я должен буду дублировать код
Собственно вот в это и вопрос - как сделать кастомное правило в которое можно передать сразу несколько параметров из реквеста, а не только одну пару ключ-значение ?
Как и откуда правильно вызвать это правило, чтобы оно отработало сразу после валидации статичными правилами ?
Может это вообще не тот инструментарий ?
Я могу создать отдельный класс с отдельными методами для проверки - заинжектить его в FormRequest, но не получится ли так что я создам велосипед, когда все уже есть ?
  • Вопрос задан
  • 355 просмотров
Подписаться 5 Средний 2 комментария
Решения вопроса 1
@NubasLol
в CustomValidationRule есть не только метод passes, но так же есть метод __construct, в который ты можешь передать что угодно.

Например $this->all() в классе запроса
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы