Laravel пользовательская проверка, проверьте другое поле, указанное в параметрах - PullRequest
1 голос
/ 02 апреля 2020

Я хочу сделать собственный валидатор в дополнение к required_without, который также не будет выполнен, если заполнено все поле.

Текущие правила:

'foo' => 'required_without:baz',
'bar' => 'required_without:baz',
'baz' => 'required_without_all:foo,bar',

В результате:

  1. Foo, Bar и Baz все пусты (ошибка)
  2. Один из Foo / Bar заполнен, другой пуст (ошибка)
  3. Foo и Bar заполнены, Baz пуст (OK)
  4. Foo и Bar пустые, Baz заполнен (OK)
  5. Foo Bar, и Baz заполнены (OK) ← Я хочу, чтобы это стало ошибкой

Итак, я создаю пользовательский валидатор, используя расширение , и хочу использовать его следующим образом:

'foo' => 'required_without:bar|empty_if_present:baz',
'bar' => 'required_without:foo|empty_if_present:baz',
'baz' => 'required_without_all:foo,bar|empty_if_present:foo,bar',

AppServiceProvider. php

Validator::extend('empty_if_present', function ($attribute, $value, $parameters, $validator) {
    $attributeIsNotEmpty = !empty($value);
    $paramsAreEmpty = true;

    foreach ($parameters as $param) {
        // how do I check if Foo and Bar are empty??
        if ($param is not empty) {
            $paramsAreEmpty = false;
        }
    }

    return $attributeIsNotEmpty && $paramsAreEmpty;
}, 'The :attribute must be empty if :fields is present.');

1 Ответ

0 голосов
/ 02 апреля 2020

Вот что вы хотите

Validator::extend('empty_if_present', static function ($attribute, $value, $parameters, $validator) {
    $attributeIsNotEmpty = ! empty($value);
    $paramsAreEmpty = true;

    foreach ($parameters as $param) {
        // how do I check if Foo and Bar are empty??
        if (! empty(request()->input($param))) {
            $paramsAreEmpty = false;
        }
    }

    return $attributeIsNotEmpty && $paramsAreEmpty;
}, 'The :attribute must be empty if :fields is present.');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...