2013-10-09 2 views
3

Я следовал документация ZendFramework для загрузки файлов находятся здесь: http://framework.zend.com/manual/2.1/en/modules/zend.form.file-upload.htmlZendFramework 2 Формы файл валидаторы

Моя проблема в том, когда я пытаюсь отправить форму, когда она не действительна я получаю следующее сообщение об ошибке:

Array provided to Escape helper, but flags do not allow recursion 

Здесь кодирует конкретное действие в моем контроллере:

public function addAction() 
{ 
    $form = new TeamForm(); 
    $form->get('submit')->setValue('Add'); 

    $request = $this->getRequest(); 
    if ($request->isPost()) { 
     $team = new Team(); 
     $form->setInputFilter($team->getInputFilter()); 
     $post = array_merge_recursive($request->getPost()->toArray(), $request->getFiles()->toArray()); 
     $form->setData($post); 

     if ($form->isValid()) { 
      $files = $request->getFiles(); 
      $filter = new RenameUpload(array("target" => "./public/uploads/", "use_upload_extension" => true, "randomize" => true)); 
      $fileinfo = $filter->filter($files['image']); 
      $team->exchangeArray($form->getData()); 
      $team->image = basename($fileinfo["tmp_name"]); 

      $this->getTeamTable()->saveTeam($team); 

      return $this->redirect()->toRoute('team'); 
     } 
    } 
    return array('form' => $form); 
} 

Я сузил ERR или по следующей строке:

$form->setData($post); 

Когда я делаю переменную дамп в $ post, все выглядит правильно. После поиска в Интернете я не смог найти ответы на вопрос, почему это происходит.

Буду рад предоставить дополнительную информацию в случае необходимости относительно этого.

Спасибо,

EDIT

Вот код вид

<?php 
$form->setAttribute('action', $this->url('team', array('action' => 'add'))); 
$form->prepare(); 
echo $this->form()->openTag($form); 
echo $this->formInput($form->get('image')); 
echo $this->formInput($form->get('name') 
    ->setAttribute('class', 'large m-wrap') 
    ->setAttribute('autocomplete', 'off') 
    ->setAttribute('placeholder', 'Name')); 
echo $this->formElementErrors($form->get('name')); 
echo $this->formInput($form->get('title') 
    ->setAttribute('class', 'large m-wrap') 
    ->setAttribute('autocomplete', 'off') 
    ->setAttribute('placeholder', 'Title')); 
echo $this->formElementErrors($form->get('title')); 
echo $this->formSubmit($form->get('submit') 
    ->setAttribute('class', 'btn green')); 
echo $this->form()->closeTag(); 
?> 
+0

Могли бы вы вставить результат 'var_dump ($ post); 'непосредственно перед' $ form-> setData ($ post); ', пожалуйста? – Carlos

ответ

-1

Я думаю, что проблема выше линии, сделать array_merge, а не рекурсивного слияния.

+0

На чем вы основываетесь? – Carlos

+0

Проделав то же самое на прошлой неделе, несмотря на то, что документы говорят о слиянии рекурсивно, мне больше повезло не делать этого таким образом. – Chidge

0

Проблема не в контроллере, а в представлении. Вы передаете массив в помощник вида escape() вместо строки.

+0

Hi jackflash, я только что добавил код моего представления в редактировании на свой пост. Я знаю, что $ _POST содержит массив в этом случае, но официальный учебник Zend говорит, чтобы сделать это таким образом. Я что-то упускаю? –

2

Проблема в файле просмотра используйте

<?php echo $this->formFile($form->get('image')); ?>

вместо

echo $this->formInput($form->get('image'));

для типа файла должно быть $this->formFile()

Смежные вопросы