Правила проверки required_if с другим условием (Laravel 5.4)

У меня проблема с правилами валидации с вложенными условиями.

class StoreRequest extends Request
{
public function authorize(){
return true;
}

public function rules(){
return [
'type_id'     => 'required|integer',
'external_id' => 'required_if:type_id,==,3|integer',
];
}
}

На самом деле я хочу:
— проверять external_id, только если type_id равен 3
— и проверьте, если это целое число.

Когда я публикую свою форму, правила работают, когда я выбираю type_id, равный 3.
Но если я выберу другой type_id, например 1 или 2, проверка не пройдет:

External_id должен быть целым числом.

Я пытаюсь добавить условие Nullable, но required_if больше не работает

У тебя была идея?

4

Решение

Ваше правило выполняет две проверки, которые не зависят друг от друга; только потому, что external_id поле не обязательно, когда type_id ! = 3, не означает, что целочисленная проверка игнорируется.

То, что вы ищете, это условное правило, который дает вам более точный контроль, когда выполнять проверку, например, :

$validator = Validator::make($data, [
'type_id'   => 'required|integer'
]);

$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});

При использовании проверки формы вы можете получить доступ к базовому экземпляру средства проверки, переопределив getValidatorInstance() метод:

class StoreRequest extends Request
{
public function authorize(){
return true;
}

public function rules(){
return [
'type_id'     => 'required|integer'
];
}

protected function getValidatorInstance() {
$validator = parent::getValidatorInstance();
$validator->sometimes('external_id', 'required|integer', function($input) {
return $input->type_id == 3;
});
return $validator;
}
}
4

Другие решения

попробуй это,

  class StoreRequest extends Request
{
public function authorize(){
return true;
}

public function rules(){
return [
'type_id'     => 'required|integer',
'external_id' => 'required_if:type_id|in:3|integer',
];
}
}
1

Просто столкнулся с той же проблемой и нашел следующий ответ, который, кажется, работает для меня:

эмиссионное использование требующего, если валидация-правило-в-формы-строитель

     return [
'type_id'     => 'required|integer',
'external_id' => 'required_if:type_id,==,3|nullable|integer',
];

Результат для меня:

поле не заполнено, тип ID не 3 — проход

поле не заполнено, введите id 3 — ошибка — обязательное поле

заполнено поле, тип ID 3, нецелое число — ошибка в целочисленном правиле

поле заполнено, введите id 3, integer — pass — все хорошо!

примечание — думаю, что в Laravel 5.3 появилось правило обнуляемости

1
По вопросам рекламы [email protected]