1

我在尝试使用 Symfony2.3 上传单个文件时遇到问题。当我尝试上传文件时,出现以下错误:

FatalErrorException: Error: Call to a member function move() on a non-object in 

我已经检查过了$csvFileForm['csvFile']->getData();,它是一个字符串(文件名),$file = $this->getRequest()->files;大小也为零。

这是表演动作:

/**
 * Finds and displays a Project entity.
 *
 * @Route("/{id}", name="console_project_show")
 * @Method("GET")
 * @Template()
 */
public function showAction($id)
{
    $csvFileForm = $this->createFormBuilder()
        ->add('csvFile', 'file')
        ->getForm();

    return array(
        'csvFileForm' => $csvFileForm->createView()
    );
}

模板中的表格如下所示:

<form method="POST" action="{{ path('console_project_upload_urls', { 'id': entity.id }) }}" >
  {{ form_row(csvFileForm.csvFile) }}
  {{ form_row(csvFileForm._token) }}
  <input type="submit" name="submit" class="submit"/>
</form>

上传动作是这样的:

/**
 * Lists all Project entities.
 *
 * @Route("/{id}/upload-urls", name="console_project_upload_urls")
 * @Method("POST")
 */
public function uploadUrlsAction(Request $request, $id)
{
    $csvFileForm = $this->createFormBuilder()
        ->add('csvFile', 'file')
        ->getForm();

    $request = $this->getRequest();

    $csvFileForm->handleRequest($request);

    $data = $csvFileForm['csvFile']->getData();
    $data->move(".", "something.csv"); // This is where the exception occurs

    $file = $this->getRequest()->files; // I have used this to check the size of the array

    return $this->redirect(...);
}

谢谢你的帮助。

4

1 回答 1

9

您必须将enctype添加到您的表单标签中。

<form method="POST" action="{{ path('console_project_upload_urls', { 'id': entity.id }) }}" {{ form_enctype(form) }}>
    ...
</form>

注意:这在 Symfony2.3 中已被弃用,并将在 Symfony3 中删除。您应该使用新的form_start()树枝助手。

{{ form_start(form, {'method': 'POST', 'action': path('console_project_upload_urls', { 'id': entity.id })}) }}
     ...
{{ form_end(form) }}
于 2013-07-09T19:00:01.370 回答