2013-05-10 23 views
0

我是一個新的Symfony,我有一個問題。 我目前正在製作一個Gallery Bundle(包含'Gallery'和'Image'實體),並且出現了我的問題。如何使用表單中的現有數據填充ArrayCollection變量?

我可以上傳圖片以及使用我的圖片對應的文件,但是我想將我的圖片分類到畫廊。我在Gallery和Image實體之間建立了一個一對多的關係,並在ArrayCollection $圖像(進入Gallery實體)中表現圖像。

現在,我怎樣才能從瀏覽器填充$圖像變量? 我想到了這個解決方案:在Gallery實體中添加一個文本字段,圖像名稱,在保存Gallery實體之前,我會獲取相應的Images實體並將它們放到我的變量$ images中,但問題是我不能從實體訪問實體管理器..

感謝您的幫助,如果您需要代碼,我當然可以顯示您,即使它非常基本。

編輯:我找到了一種方法從實體獲得對實體管理器的訪問權限,但據說它是不安全的。目前我可能會使用它,但如果有人能向我解釋更好的方法,我會接受。

回答

0

你可以write a service注射它可以創造& /或更新從$圖像名稱數組畫廊,有你的電話控制器的實體管理器,而不是你的實體依賴於實體管理器。例如:(見上文如何在services.yml配置服務鏈接)

class GalleryManager 
{ 
    private $entityManager; 

    public function __construct(\Doctrine\ORM\EntityManager $entityManager) 
    { 
     $this->entityManager = $entityManager; 
    } 

    public function updateGalleryImages(Gallery $gallery, array $imageNames) 
    { 
     ... 
    } 
} 

不過,我不知道,如果在圖像名稱輸入是最好的辦法在這裏。你將如何確保你的圖片名稱是獨一無二的?處理找不到的名字?處理重複的名字?接口的可用性有多重要?效率如何 - 每個圖像名稱的一個查詢?一個畫廊可能包含多少?

另一種用戶界面是提供某種形式的圖像搜索/列表,並允許用戶從結果中選擇圖像添加到圖庫 - 在這種情況下,選擇應該返回爲圖像實體數組if正確實施。最簡單的是,對於少量圖像,這可能只是所有圖像名稱的多選列表框,但理想情況下,用戶希望看到他們選擇的圖像的縮略圖預覽。

所有圖像名稱(或複選框的集合)的基本列表框可以使用一個表單(data_class Gallery)來實現,其中的圖像集合爲entity field。這將直接映射到gallery->圖像,實體永遠不需要依賴EntityManager。

從篩選後的圖像組中選擇更爲複雜,但如果您感興趣的話,我可以指出您正確的方向。

+0

是的請,這正是我想要做的!我不知道我可以使用某種'實體領域'!非常感謝。你已經指出了我的正確方向,但如果你有更多,請告訴我:)。我明天會編碼,我會回來報告。 – Videl 2013-05-10 19:13:32

0

我不知道是否我的思念它迫使你手動填充您的$圖像一些重要的東西,但填充從瀏覽器的多重圖像畫廊,並堅持它,我會按照下面的步驟:

  1. 使用實體中的表單生成器創建映射表單。
  2. 使用控制器動作堅持(你應該有你的學說映射)
  3. 使用doctrine e ventos:preUpdate,prePersist,PostPersist等。正確上傳圖像文件。

正如你所看到的,烹調手冊是一個很好的參考下手;它會指導您完成網頁開發中最常見的任務。

+0

感謝您的回覆。是的,這就是我所做的,而且效果很好。但我希望能夠上傳圖像,然後(稍後,不是以相同的形式)選擇應該在圖庫中的圖像。我不知道如何將正確的圖像實體與將要創建的圖庫實體相鏈接。 – Videl 2013-05-10 19:07:52

相關問題