2017-07-06 25 views
-1

我有一個項目的文件,當我創建新項目我有表格創建與FormBuilder,那裏我有一個字段從FileType,它被轉換爲UploadedFile,它工作正常。我想要的是能夠在文件之後上傳,而無需編輯項目。一個簡單的「添加更多文件」按鈕。不需要其他字段,因此 - 不需要FormBuilder。另外我不想在單擊「添加更多文件」後有「保存」按鈕。我想單擊它選擇我的文件,當我點擊「打開」表單被提交。這個我用下面的代碼Symfony3上傳文件不使用FormBuilder

<form action="{{ path('image_upload', { 'id': project.id }) }}" method="post" name="form">        
    <div class="col-md-2" id="imageUpload"> 
    <span>Add More Files</span> 
     <input type="file" readonly="readonly" id="imageUpload" name="image_upload[]" onchange="form.submit()" multiple/><div class="upload_icon"></div> 
    </div>  
</form> 

實現正如你可以看到這種形式僅僅是這一個按鈕,這onChange提交它。我的問題是,在提交後,文件不是UploadedFile類型,我用於上傳圖片的服務不起作用。我試圖自己創建一個UploadedFile的實例,但它需要filePath,我不知道如何去做。

這就是提交 enter image description here

從這個我不知道怎麼把文件路徑實際上將它添加到UploadedFile構造。另外,當我調試項目創建期間(我使用FileType時)發生的情況時,我發現filePath是「C:\ xampp \ tmp」,我不知道它來自哪裏。我首先想到的是簡單地將其與此代碼

$file = new UploadedFile("C:\\xampp\\tmp",$file); 

增加的UploadedFile構造當我運行它,我收到此錯誤 -

文件「C:\ XAMPP \ tmp目錄」不存在

因此,要回顧一下 - 這是$文件 - >的getPath()給了我當我使用FileType,但是沒有它,當我有簡單的上傳按鈕,它不列入存在的路徑。

在這一點上我投降了,就像「好吧......如果它要我使用FormBuilder那麼糟糕 - 那麼我會」。這裏是AddFileType代碼(這是關係到沒有實體或任何東西)

$builder-> 
     add("addFiles",FileType::class,array(
      'label'=>'Add More Files', 
      'multiple'=> true, 
      'mapped'=> false, 
      "required"=>false 
     )); 

這裏是另一個問題 - 我希望能夠提交表單沒有提交按鈕。簡單地當我點擊「添加更多文件」,並選擇一些文件的形式爲我submited。

我的問題 - 有沒有辦法在使用簡單的上傳按鈕時獲取filePath,因此創建一個UploadedFile的實例並將其從我的服務發送到我的數據庫。如果沒有 - 有沒有一種方法FormBuilder使它如此當FileType按鈕被點擊提交表單沒有任何提交按鈕需要。

+0

可以使用VichUploaderBundle之間的關係。這很容易,簡單和有用。 文檔在這裏 https://github.com/dustin10/VichUploaderBundle/blob/master/Resources/doc/index.md – Ld91

回答

1

我認爲你需要設置映射到真實的,因爲它設置爲false也不會是這個領域和數據庫的字段

$builder-> 
    add("addFiles",FileType::class,array(
     'label'=>'Add More Files', 
     'multiple'=> true, 
     'mapped'=> true, 
     "required"=>false 
    ));