У меня есть приложение Laravel, и я использую проверку формы запроса.
Я реализовал следующее:
public function rules(){
return [
'item_name'=>'required',
'item_description'=> 'required',
];
}
В контроллере у меня следующее:
public function storeItem(storeItem $request) {
$validated = $request->validated();
...
...
}
}
Это работает правильно, но поскольку для некоторых элементов требуются не все переменные $ request, я хотел бы реализовать оператор switch следующим образом:
public function rules()
{
$item_type = $this->route('item_type');
switch($item_type) {
case 'type1':
return [
'item_name'=>'required',
'item_description'=> 'required',
];
break;
case 'type2':
return [
'item_name'=>'required',
'item_amount'=> 'required',
'item_favorite'=> 'required',
];
break;
}
}
Я получаю сообщение об ошибке:
Argument 2 passed to Illuminate\Validation\Factory::make() must be of the type array, null given
Это сообщение об ошибке предполагает, что я не возвращаю массив, но у меня есть операторы возврата для каждого случая переключения, поэтому я не уверен, почему я вижу это сообщение eeror.
Есть идеи, как это можно решить? Если оператор switch - не лучший вариант, есть ли другая идея?
Да, документировано здесь (laravel.com/docs/5.7/validation#form-request-validation). В нем упоминается: «Все, что вам нужно сделать, это напечатать запрос на метод вашего контроллера». Эта часть работает нормально. Это оператор Switch, который вызывает проблемы
Справедливо. На самом корпусе коммутатора есть строка 'item_type'. Вероятно, вы захотите передать туда переменную, иначе она не будет соответствовать ни одному регистру и по умолчанию ничего не будет.
Это все еще осталось, я отредактировал исходный пост. Проблема все еще существует
Что, если $item_type не является ни type1, ни type2?
Вы должны добавить футляр default или return array(); в конце вашего метода.
Кроме того, если есть только 2 условия / значения, я не вижу необходимости в переключении.
break после return тривиален.
Спасибо за ваши предложения. Вариант по умолчанию есть, но не показан в исходном сообщении. А пока я нашел решение. Мой случай переключения должен быть основан на переключателе ($ this-> request-> get ('item_type')).
Хорошо, не могу этого понять, так как я не знаю, что происходит в коде. Кроме того, вам всегда нужно упоминать код минимальный, полный, поддающийся проверке, чтобы получить лучший ответ.
Спасибо за предложение






Вот решение:
public function rules()
{
switch($this->request->get('item_type')) {
case 'Type1':
return [
'item_name'=>'required',
'item_description'=> 'required',
];
break;
case 'Type2':
return [
'item_name'=>'required',
'item_amount'=> 'required',
'item_favorite'=> 'required',
];
break;
default:
return [
'item_name'=>'required',
];
}
}
$requestтипаstoreItem?