Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 03.07.2017 09:33:10

Laravel: проверка формата полей когда хотя бы одно из них обязательно

Допустим, мы хотим спросить через форму ввода у пользователя хотя бы один из двух контактов: телефон и/или адрес электронной почты. Это значит, что в правилах валидации будет правило required_without для обоих полей:

$this->validate($request, [

    'email' => 'required_without:tel|email',
    'tel' => 'required_without:email|regex:/(01)[0-9]{9}/'

], $messages);

Нам необходимо валидировать формат данных только тогда, когда они введены, но в коде выше формат проверяется всегда. Поскольку нам нужно знать хотя бы один контакт, то правило sometimes не подходит.

Не в сети

#2 03.07.2017 11:40:03

Re: Laravel: проверка формата полей когда хотя бы одно из них обязательно

Попробуйте правило bail (ставится самым первым), может сработает. Честно говоря, ни разу его не использовал.
Ещё вариант

$this->validate($request, [
    'email' => 'required_without:tel' . !empty($request->email) ? '|email' : '',
    'tel' => 'required_without:email' . !empty($request->tel) ? '|regex:/(01)[0-9]{9}/' : '',
], $messages);

Не в сети

#3 03.07.2017 12:42:06

Re: Laravel: проверка формата полей когда хотя бы одно из них обязательно

в 5.4 добавилась миддлварь, которая пустые строки автоматически превращает в null. для того чтобы это не сбивало с толку валидаторы, добавилось правило валидирования nullable. так что код видимо должен представлять собой что-то вроде

$this->validate($request, [

    'email' => 'required_without:tel|nullable|email',
    'tel' => 'required_without:email|nullable|regex:/(01)[0-9]{9}/'

], $messages);

Не в сети

#4 03.07.2017 12:44:01

Re: Laravel: проверка формата полей когда хотя бы одно из них обязательно

Попробуйте правило bail (ставится самым первым), может сработает

bail для другого предназначен. это правило полностью прекращает валидацию если поле не валидно и не проверяет оставшиеся. по дефолту валидатор при обнаружении ошибки продолжает работать и проверять остальные поля и собирает вообще все ошибки всех полей.

Не в сети

#5 03.07.2017 12:53:03

Re: Laravel: проверка формата полей когда хотя бы одно из них обязательно

bail для другого предназначен. это правило полностью прекращает валидацию если поле не валидно и не проверяет оставшиеся. по дефолту валидатор при обнаружении ошибки продолжает работать и проверять остальные поля и собирает вообще все ошибки всех полей.

Прекращает валидацию этого поля, но не остальные поля. Так в документации написано.

Не в сети

#6 03.07.2017 16:54:13

Re: Laravel: проверка формата полей когда хотя бы одно из них обязательно

Прекращает валидацию этого поля, но не остальные поля

окей, был неправ smile

Не в сети

#7 03.07.2017 21:04:45

Re: Laravel: проверка формата полей когда хотя бы одно из них обязательно

Звучит как похвала smile

Не в сети

Подвал раздела