2012-04-22 69 views
1

我知道如何通過createForm方法將變量從控制器傳遞給表單,但如果需要將該值傳遞給嵌入表單中的表單,我將其稱爲createForm?我從來沒有在嵌入式表單的任何地方顯式調用createForm,那麼我該如何爲它獲得它的價值呢?值得注意的是,我試圖通過的價值可以通過服務獲得,但我不能撥打$this->get('serviceName')->getValue(),因爲我不在控制器中。作爲參考,這是我得到的值父窗體,請注意我是如何做到這一點通過的CreateForm方法,而不是構造器:將選項數組中的值傳遞給嵌入表單

//in a controller 
$form = $this->createForm(new FormType(), $formObject, array('value' => $value)); 

回答

2

這不是因爲你是不是在控制器,你不能注入服務(和參數)。尤其是每種類型都可以成爲服務的類型。當然,您不能直接執行$this->get('serviceName')->getValue(),因爲方法get默認情況下不可用。但是,您可以將服務注入您的表單類型。有關如何注入服務的一些信息,請參閱依賴注入here的另一個問題。

看到這個cookbook section它告訴你如何將你的類型轉換成一個服務,這樣你就可以注入你的依賴關係,並同時注入你的價值。

如果由於某種原因您無法將您的類型轉換爲服務,那麼您需要做的是將您的選項傳遞給FormType,這將讀取它們並將value選項傳遞給嵌入類型。它就像一個傳遞式樣式設計,將所有選項傳遞給主類型,這會將其中的一些傳遞給每個子類型,比每個子類型將它們傳遞給它們自己的子類型等等。再次,你可以看看這個[食譜食譜]如何閱讀選項並在自定義表單類型中使用它們。

總之,我認爲將您的類型轉換爲服務更容易。

希望這可以幫助你。

Regards,
Matt