2013-07-09 30 views
1

我一直在試圖用Symfony2.3上傳單個文件時出現問題。當我嘗試上傳的文件我得到以下錯誤:上傳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(...); 
} 

感謝您的任何幫幫我。

回答

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) }} 
+2

謝謝!我編輯了答案,在'from_end'中添加表單。 – Chango