У меня проблема с правилами валидации с вложенными условиями.
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 больше не работает
У тебя была идея?
Ваше правило выполняет две проверки, которые не зависят друг от друга; только потому, что 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;
}
}
попробуй это,
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',
];
}
}
Просто столкнулся с той же проблемой и нашел следующий ответ, который, кажется, работает для меня:
эмиссионное использование требующего, если валидация-правило-в-формы-строитель
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 появилось правило обнуляемости