Напротив значения required_if в laravel с использованием оценки нескольких значений - PullRequest
0 голосов
/ 17 мая 2019

Как проверить должен иметь значение NULL , если другое поле имеет определенное значение или не равно NULL

В моем случае это противоположность required_if с несколькими значениями

$rule = array(
  'selection' => 'required',
  'stext' => 'required_if:selection,2|required_if:selection,3',// stext should be null if selection is 2 or 3 
);

А если нужно, как выполнить собственную проверку?

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Итак, в вашем примере вы можете сделать что-то вроде этого:

$rule = array(
  'selection' => 'required',
  'stext' => 'required'
);

// override the rule
if(in_array(request('selection'), [2, 3])) 
{
  $rule['stext'] = 'nullable';
}

Это означает, что если выбрано значение 2, поле будет обязательным, а если в поле selection есть какое-либо другое значение, поле stext будет обязательным.

Я не уверен, правильно ли я понял ваш вопрос. В любом случае значение, противоположное required_if, равно required_without, поэтому вы можете использовать его, если хотите, чтобы это поле было обязательным, даже если выделение пусто.

С пользовательским правилом ваш метод pass должен выглядеть следующим образом:


namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;

class CustomRule implements Rule
{

    protected $selection;

    public __construct($selection)
    {
        $this->selection = $selection;
    }

    public function passes($attribute, $value)
    {
        return $value === null && in_array($this->selection, [2, 3]);
    }
}

Вы используете это так:

$rule['stext'] = [ new CustomRule(request('selection') ]
0 голосов
/ 17 мая 2019

Я пытаюсь расширить правило проверки.поместите следующее в AppServiceProvider :

Validator::extend('null_if', function ($attribute, $value, $parameters, $validator) {
    $other = $parameters[0];
    $other_value = array_get(request()->toArray(), $other);
    if ($parameters[1] == $other_value) {
        return empty($value);
    }
    return true;
});

Скажите, если это работает или какая ошибка вам дана.

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