2017-09-13 66 views
1

我正在閱讀一段時間這個,但沒有找到適合我的東西。 這是實體Symfony文件字段空編輯

/** 
* @ORM\Column(type="string") 
* 
* @Assert\NotBlank(message="Molimo unesite PDF ili Word fajl.") 
* @Assert\File(mimeTypes={ "application/vnd.openxmlformats-officedocument.presentationml.presentation", "application/vnd.ms-powerpoint", "application/pdf", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}) 
*/ 
private $body; 

這是形式

// Problem with empty field on edit persist! Form expect FileType but db sends string!!! 
      ->add('body', FileType::class, [ 
       //'data_class' => null,// <-- If I change it nothing happened. 
       'label' => 'Word ili pdf dokument', 
       'invalid_message' =>'Id posta nije validan', 
       'attr' => [ 
        'class' => 'form-group', 
     ]]) 

一切都非常簡單並提出以下文檔。我有實體,其中包含幾個屬性之一的文件($ body)。文件被設置爲保存在web/uploads/post /中。當我去編輯頁面時,我得到這個錯誤:

「窗體的視圖數據預計是類Symfony \ Component \ HttpFoundation \ File \ File的一個實例,但是是一個(n)字符串。這通過將「data_class」選項設置爲null或通過添加將字符串轉換爲Symfony \ Component \ HttpFoundation \ File \ File實例的視圖轉換器來實現。

如果我設置data_status =>空字段爲空。

我需要的是一些鏈接到這個工作的例子,數據轉換器可能?

+0

其實任何建議都是值得歡迎的! –

+0

您能否給我們提供一些關於您面臨的問題的更多信息? – Toastrackenigma

+0

我做了一些修改。如果有任何需要的信息,我準備寫。 –

回答

0

你可以通過在editAction中創建一個新的File()來解決這個問題。像這樣:

/** 
* @Route("/edit/{yourEntity}", name="entity_edit") 
* 
* @return Response 
*/ 
public function editAction(Request $request, YourEntity yourEntity) 
{ 
    $body = new File($this->getParameter('your_files_directory') . '/' . $yourEntity->getBody()); 
    $yourEntity->setBody($body); 
    // rest of your editAction 
} 
+0

謝謝!在我實現你的代碼之後。我仍然有空的文件空間,但在我從表單中刪除該字段後,編輯時沒有任何限制。不好,我知道,但我確實需要更改文件的名稱。再次感謝! –

0

好的,解決了。 @ASOlivieri的答案很好,只需稍作修改即可。在他的答案中的代碼將記住帶有文件名的路徑。所以如果你想再次編輯它會拋出沒有發現的exeption。您必須再次 - > setBody,才能與原始文件名相同。在沖水前設置()

public function editAction(Request $request, Post $post) { 
    $fileName = $post->getBody(); 
    $file = new File($this->getParameter('post_directory') . '/' . $post->getBody()); 
    $post->setBody($file); 

    $deleteForm = $this->createDeleteForm($post); 
    $editForm = $this->createForm('AppBundle\Form\PostEditType', $post); 
    $editForm->handleRequest($request); 


    if ($editForm->isSubmitted() && $editForm->isValid()) { 

     $post->setBody($fileName); 
     $this->getDoctrine()->getManager()->flush(); 

希望這有助於!

+0

很高興你知道了! – ASOlivieri