2013-10-09 32 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的变量转储,一切看起来正确。经过在互联网上搜索后,我一直无法找到任何答案,为什么会发生这种情况。

如果需要,我很乐意提供更多信息。

感谢,

编辑

这里是视图代码

<?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

嗨jackflash,我只是在我的文章中添加了我的视图的代码编辑。我知道$ _POST在这种情况下包含一个数组,但官方的Zend教程正在说这样做。我错过了什么吗? –

2

问题是在你的视图文件,请使用

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

,而不是

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

文件类型应该是$this->formFile()