Laravel 5: запрос проверки многомерного массива
у меня есть формы, которые представляют многомерные массивы. Например:
slide[1][title]
slide[2][title]
теперь я использую класс запроса для определения своих правил. Как я могу перебирать все элементы массива в этом классе. Я попробовал:
public function rules()
{
return [
'id' => 'required',
'slide' => 'array|min:1',
'slide.*.title' => 'required|max:255',
'slide.*.description' => 'required|max:255',
];
}
но это не сработало.
2 ответов
предупреждение: это решение было опубликовано в вопрос Алексей. Поскольку ответы не должны делиться в теле вопроса, а OP, похоже, неактивен, я перепечатываю его ответ как Вики-сообщество для будущих читателей:
Я нашел решение, получив массив слайдов и цикл через него.
public function rules()
{
$rules = [
'id' => 'required',
'slide' => 'array|min:1',
];
foreach($this->request->get('slide') as $key => $val){
$rules['slide.'.$key.'.title'] = 'required|max:255';
$rules['slide.'.$key.'.description'] = 'required|max:255';
}
return $rules;
}
для многомерных массивов нет предварительно настроенного правила проверки. Простейший способ-это сделать проверку массива внутри вашего контроллера.
проблема в том, что при использовании многомерного массива для хранения одиночных значений логика неверна, и вы должны исправить свою логику, а не фреймворк.
например, я видел много времени, отправляя учетные данные пользователя, такие как $var['login']['pass'] и $var['login']['username'], которые можно легко перевести к 2 различным переменным, что имело бы больше смысла.
Если вы знаете, какими должны быть эти значения, и вы уверены, что проверка может быть чем-то общим для всех разных значений, вы можете создать пользовательский валидатор (прочитайте документацию по проверке вашей версии laravel).
ссылаясь на ваш код, я думаю, что многомерный массив объявлен так же, как и в вашем html slide[]['title']
. Будет полезно узнать, как вы отправляете эти параметры в бэкэнд, чтобы затем дать вам представление о том, как настроить проверку.