Может ли Laravel игнорировать дальнейшие правила проверки, если вы используете exclude_if, и это TRUE? - PullRequest
0 голосов
/ 03 февраля 2020

Я использую последнюю версию Laravel.

Я использую Validator в своем контроллере магазина, и, по сути, у меня есть поле под названием «current», которое является обязательным и, как ожидается, будет логическим. У меня также есть 2-е поле, которое является необязательным и называется «to_date», из которого плагин javascript (moment. js) предоставит либо дату, либо, если она пуста, предоставляет строку «Недопустимая дата» контроллеру.

I sh, чтобы иметь возможность проверить «to_date» в качестве даты с использованием Validator, если «current» равно 0. Если «current» равно 1, тогда I w sh будет игнорировать проверку для поля "to_date"

Мой код начинался как:

$validator = Validator::make($request->all(), [
        'current' => 'required|boolean',
        'to_date' => 'date',
]);

Но, конечно, это не удалось, потому что, когда "to_date" не указано, интерфейс предоставляет строку "Неверная дата" который не проходит проверку. А потом я немного больше изучил правила проверки Laravel и нашел «exclude_if», который, казалось бы, уместен.

$validator = Validator::make($request->all(), [
        'current' => 'required|boolean',
        'to_date' => 'exclude_if:current,1|date',
]);

Это все еще не сработало, потому что, похоже, оно «исключало его» из массив $ validator, он все еще идет к валидации 'date' и завершается ошибкой. И вот тогда я посмотрел на «залог», который должен прекратить валидацию, когда Validator обнаруживает свой первый сбой, однако это тоже не работает, потому что exclude_if не завершается с ошибкой при запуске, а скрипт все еще нажимает «date» и завершается неудачей.

Любая помощь / указатели приветствуются.

Я уверен, что смогу решить эту проблему, обернув Validator в оператор if и выполнив несколько логических операций c, чтобы проверить, включать ли to_date в Validator, но это кажется немного вонючим и не очень аккуратным.

Есть идеи? :)

1 Ответ

0 голосов
/ 03 февраля 2020

Проблема в том, что вы намеренно предоставляете неверные данные "недействительная дата".

Это вызовет ошибку проверки, потому что данные присутствуют.

exclude_if просто исключает данные из массива после проверки.

Лучшее решение - не отправлять неверные данные, а делать required_if:current,0|date, а когда to_date пусто и требуется, он не пройдёт часть проверки даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...