2014-10-30 169 views
0

其實我對將表達式傳遞參數的最佳方式感到困惑。據我所知,有三種方式:symfony2:表單注入依賴注入

  1. 要打開窗體類爲服務

  2. 要通過陣列選項參數傳遞

  3. 要通過的構造函數傳遞參數表格類別

什麼是最好的/最乾淨的方式?謝謝

回答

1

在我看來:

  1. 要打開窗體類爲服務 - 您使用,如果參數都可以通過DI,喜歡的EntityManager,路由器和其他服務等
  2. 要通過argum ents通過陣列選項 - 「靜態」數據,如:顯示此字段僅供管理員使用,
+0

所以你說,如果我們需要記錄器例如它只是**更好**將窗體轉換爲服務。但是我認爲當從控制器調用表單時,只需通過構造函數或數組$ option就可以方便地傳遞參數:$ options:您不必將表單聲明爲您的服務文件,您沒有更新服務文件,每當你意識到你需要另一個依賴等... – smarber 2014-10-31 10:12:16

+1

這只是我的意見。即使我必須修改服務聲明,我更喜歡乾淨的代碼。 控制器中的代碼較少=錯誤較少。下一步的改進是我不必修改控制器來更改表​​格中的示例:添加一些字段。我只需要覆蓋更簡單的服務,並且不要複製代碼(控制器)來執行此操作。在我的情況下,FormType作爲服務總是大而複雜,所以對我來說這是更好的解決方案。 – jamek 2014-10-31 13:22:42

+0

我同意你的觀點,作爲一種服務,表單更獨立。 +1 – smarber 2014-10-31 13:48:22

0

對於我的大部分表格,我創建了一個單獨的表格類。當我需要使用預填充數據呈現表單時,我在我的控制器中加載實體,並在構建表單時傳遞該實體。舉例來說,如果我有一個名爲$用戶鏈接到註冊實體的實體,我將填充我的形式是這樣的:

$registration = $user->getRegistration(); 

    $form = $this->createForm(new RegistrationType(), $registration, array()); 

然後我呈現在樹枝的$形式:

return $this->render(
     'AcmeAccountBundle:Account:register.html.twig', 
     array('form' => $form->createView()) 
    ); 
+1

這又如何回答將參數傳遞給窗體的問題? – Cerad 2014-10-31 02:17:37

+0

$註冊變量是註冊表單使用的相同類型,這將填充表單。當你說傳遞參數時,我假設你的意思是你想讓字段填充特定的項目,這將做到這一點。 – George 2014-10-31 16:07:51