Laravel 4 – Enviando a input de volta para uma apresentação falhada

Eu tenho esse formulário

@extends('index') @section('main') 

Create a new poll

{{ Form::model(new Poll, ['route' => 'polls.store', 'class' => 'create-poll']) }}
{{ Form::label("topic", "Write your poll question") }} {{ Form::text('topic', '', ['placeholder' => 'Example: What is the best number?', 'id' => 'topic']) }}
{{ Form::label(null, "Write the possible answers") }} {{ Form::text('option[]', null, ['class' => 'option', 'placeholder' => 'Test option']) }} {{-- This will create another option[] input element --}}
{{ Form::submit() }} {{ Form::close() }} @stop

Há mais, mas essa é a parte importante. Basicamente, é um nome de votação. Tem um tópico e pelo menos uma opção. Clicando em um botão, você pode adicionar mais opções.

Este é o controlador:

 public function store() { $data = Input::all(); // Validate input $validator = Validator::make($data, Poll::$rules); if ($validator->fails()) return Redirect::back()->withErrors($validator)->withInput(); ... 

O problema aqui é que o WithInput() lança um erro:

ErrorException

htmlentities () espera que o parâmetro 1 seja string, array dado (View: /home/dbugger/laravelproject/app/views/polls/create.blade.php)

Eu suspeito que é porque estou usando um Elemento de Forma de Array , mas não tenho certeza por que ou como, já que naquele momento não estou tentando preencher o formulário com os dados enviados (falharam) …

Para inputs agrupadas como Form::text('option[]')... ou Form::checkbox('options[]')... você precisa reorganizar a matriz publicada em seu controlador:

Algo como:

 $optionsInput = Input::get('option'); if(is_array($optionsInput)) { // process your options, eg like this foreach($optionsInput as $key => $input) { $proceededOptionsArray[$key] = $input; } } 

A mesma regra para inputs de matriz é aplicável para o validador, então:

 // return it with other `Input` return Redirect::back() ->withErrors($proceededValidatorArray + $validator) ->withInput($proceededOptionsArray + Input::all()); 

{{Form :: text (‘opção []’, null, [‘class’ => ‘opção’, ‘placeholder’ => ‘Opção de teste’])}} na forma como você nomeou a opção de campo de texto [] …