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']. Будет полезно узнать, как вы отправляете эти параметры в бэкэнд, чтобы затем дать вам представление о том, как настроить проверку.