2013-08-21 21 views
1

首先對不起我的英語不好,I'm工作就可以了...上傳文件和縮略圖與生命週期回調的Symfony 2

我讀的食譜「如何處理文件上傳」爲Symfony2 .I已經實現了這個實體,並且此時它正常工作。

在這種情況下,我必須上傳大量照片和各自的縮略圖,以保持數據庫中的路徑。我的第一個選擇是用OnetoOne關係創建兩個實體Image和Thumbnail,但子實體不能捕獲從父實體形式接收的文件。

我的第二選擇是將它全部放在一個實體中,具有兩個屬性($path and $thumbpath)並調用兩個上傳方法與相同的文件,並在uploadthumb()方法中進行調整大小。但它會拋出這個錯誤:" The file "image.jpg" was not uploaded due to an unknown error. "

我看了看liipimagineBundle和其他一些,但只能在飛行中創建縮略圖,不要像存儲實體一樣只存儲在緩存中。

有人可以給我一個如何以最有效的方式使它的想法? 謝謝

回答

1

因爲這沒有回答,我想顯示另一個包,這對上傳Symfony2非常有幫助 - OneupUploaderBundle。我用它來上傳圖像,並在一個實體中創建一個帶有兩個字段的縮略圖 - 一個用於完整的文件名,另一個用於縮略圖名稱,此外還有多個前端,因此您可以輕鬆地自定義用戶的外觀。

在OneupUploaderBundle EventListener中,我添加了另一個函數,該函數調整已上傳的文件的大小,然後將其保存在拇指添加到文件名的相同位置。這是一個乾淨的方法,工作順利。

+1

你能不能給我們更多的細節?謝謝! –

0

要處理與實體相關的上傳,總是對我有效的是使用實體本身。 就像添加一些方法一樣簡單,一種是在條目被保存之前執行,它將所需的名稱應用到文件並配置所需的路徑,然後再將文件移動到那裏。如果條目被刪除,postRemove方法也可用於刪除文件。

要使這種方法得以執行,只需將生命週期回調添加到實體定義中即可。一個常見的錯誤是在使用原則爲其生成yml定義之後,在實體類中使用註釋符號。您必須決定是否使用yml或符號,不能同時在同一個包中使用兩者。大多數手冊使用註釋符號來調用生命週期回放...如果您不確定您的項目,只需轉到包中的教義生成實體定義(通常在Resources/config/doctrine ...)。如果您有YML文件存在,編輯lifeCycleCallbacks行添加有你的方法:)

此鏈接可能是用好你的:http://symfony.com/doc/current/book/doctrine.html