Рефакторинг и оптимизация Laravel правил проверки (обязательно с) - PullRequest
0 голосов
/ 24 марта 2020

У меня есть форма, количество входов которой является гибким в зависимости от количества строк пользователей.

| row |  FullName  |  Phone    |    Email   |
|------------------------------------------ |
|  1  |    Alex    |     06    |   a@a.com  |
|------------------------------------------ |
|  2  |    Bob     |    968    |            |
|------------------------------------------ |
|  3  |            |           |   j@j.com  |
---------------------------------------------
 _____________________
| Add new User Button |
 ---------------------

Когда заполнен любой ввод каждого пользователя, требуются другие входы этого пользователя.

Например: здесь у нас есть ошибка для строки 2, потому что FullName и Phone заполнены, но Email пусто

или

Ошибка для строки 3, потому что FullName и Phone пусты, но Email заполнено .

Поэтому я пишу правило проверки для этого, как показано ниже:

        $validator = Validator::make($request->all(), [
            'User.*.FullName' => 'required_with:User.*.Phone | required_with:User.*.Email',
            'User.*.Phone' => 'required_with:User.*.FullName | required_with:User.*.Email',
            'User.*.Email' => 'required_with:User.*.FullName | required_with:User.*.Phone',
        ], $this->messages());

Количество входных параметров для каждого пользователя велико, что я перечислил здесь в 3 случаях (FullName, Phone, Email) ).

Если я напишу проверки, как указано выше, код будет грязным. Как провести рефакторинг этого кода или идеи для этого типа проверки?

1 Ответ

0 голосов
/ 24 марта 2020

Как я уже говорил в этом сообщении ;

Laravel, имеется отличная система проверки запросов форм. Я настоятельно рекомендую использовать это вместо использования всех проверочных логи c в контроллерах.

Этот сценарий выглядит так же, как и вопрос, на который я отвечал ранее. Когда мои проверки сложны, как это, мое личное мнение лучше использовать формы запросов. Потому что его намного проще читать и управлять им.

И на самом деле вам не нужно писать свои правила, подобные этим;

required_with:User.*.Phone | required_with:User.*.Email

required_with может принимать несколько параметров и это потребуется, если один из параметров не пуст;

'User.*.FullName' => 'required_with:User.*.Phone,User.*.Email',

Примечание: если требуется, если оба параметра не пустые, проверьте также required_with_all .

...