Вопрос:
У меня есть форма, и если я отправлю форму со всеми нужными данными, все будет отлично… но если я намеренно сделаю какой-то недостаток
(подтверждение, например, ‘title’ => ‘required|min:2’)
и я ставлю только одного символа для названия, или если я пропущу любое обязательное поле, я получаю эту ошибку:
htmlspecialchars() expects parameter 1 to be string, array given
Я понял, что проблема в этом поле выбора
{!! Form::select(‘item[0][]’, $items, null, [‘class’ => ‘form-control’, ‘required’]) !!}
и я даже пытался использовать нормальный флажок select без помощника формы {!! !!}
Но я все равно получаю ту же ошибку!
Итак, проблема где-то с проверкой, когда есть вложенный массив…. есть ли способ исправить это?
Лучший ответ:
OK У меня наконец есть ответ на эту проблему… похоже, что что-то изменилось в Laravel 5.3, и если вы хотите иметь имя с массивом вроде этого
{!! Form::label(‘title’, ‘* Eventname: ‘, [‘class’ => ‘control-label’]) !!} {!! Form::text(‘title[]’, null, [‘class’ => ‘form-control’, ‘required’) !!}
Вы должны поставить [0] что-то в скобках ‘индексы’ следующим образом:
{!! Form::text(‘title[0]’, null, [‘class’ => ‘form-control’, ‘required’) !!}
а затем при использовании валидации
заглавие.*
для правила
ОБНОВИТЬ
Поскольку я использую динамическую форму, которую можно развернуть, и новые поля формы добавлены (необязательно), мне нужно было поместить [] нотацию массива для имени, но на самом деле, если у вас уже есть жестко закодированное множество полей с тем же именем, что и элемент [], вы не нужно поместить индексы [0] внутрь. Валидация будет работать для них.
Проблема возникает только в том случае, если у вас есть одно поле ввода, и вы помещаете [] запись массива вдоль имени, например, ‘item[]’
это вызовет ошибку, если какое-либо правило проверки будет нарушено…