如何在没有实体类的情况下使用表单上传文件

6

我试过使用没有实体类的表单上传文件。目前还没有成功。

  // Controller
  public function uploadAction() {
    $request = $this->getRequest();
    $form = $this->createFormBuilder()
            ->add('images', 'file') // If I remove this line data is submitted correctly
            ->add('dir', 'text')
            ->getForm();

    if ($request->getMethod() == 'POST') {
      $request = $this->getRequest();
      $form->bindRequest($request);

      $data = $form->getData();
      var_dump($data);
    }   
    else
      return $this->render('OverseerMainBundle:Default:form.html.twig', array(
          'form' => $form->createView(),
      )); 
  }

// form.html.twig
{% block body %}
<form action="{{ path('OverseerMainBundle_upload') }}" method="post" {{ form_enctype(form) }}>
    {{ form_widget(form) }}

    <input type="submit" />
</form>
{% endblock %}

到目前为止,var_dump输出:

array(2) { ["images"]=> NULL ["dir"]=> NULL }

然而,如果我删除->add('images', 'file')这一行,一切都正常:
array(1) { ["dir"]=> string(4) "test" }

附言:我已经检查了表单的HTML代码,发现属性enctype="multipart/form-data"已存在,因此这不是问题。

2个回答

6
此外,我希望这能对其他人有所帮助:
if ($form->isValid()) {
        $file = $form->get('file')->getData();
        $name = $file->getClientOriginalName();
        $dir = __DIR__.'/../../../../web/uploads';

        $file->move($dir, $name) ;
    }

有人知道为什么在Symfony 2.7.40中$form->get('file')->getData()无法工作吗?它返回null。 - Stev
找到答案了,是v2.7.38通过修复安全漏洞引入了BC。https://github.com/symfony/symfony/pull/24993 - Stev
我已经停止使用2.7及以下版本。我从2.3跳到了2.8,目前正在准备升级到3.4。 - Safwan Bakais

2

您是否检查过文件大小是否超过服务器最大文件大小限制?默认为2MB。我还没有使用过Symfony 2.0,所以不确定。


2
哈哈,没关系伙计,我们都曾经犯过这种错误。再喝杯咖啡吧。 - thenetimp

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接