2013-12-13 139 views
0

參數Symfony2的控制器功能,我認爲這是比較複雜的技巧之一,獲得正確的,因此我決定引起了非常懂行的人在計算器上的幫助。我的情況如下:我有兩個實體,一個用戶和一個帳戶。用戶總是與帳戶註冊時(並且根據用戶的類型,可能與一個以上的帳戶。註冊後,功能saveUser()被調用(通過從前端AJAX)和提交的表單數據被檢索從請求對象,這些數據然後被傳遞給函數saveAccount($數據)中的一個參數的形式(這被稱爲在saveUser()函數),並且創建帳戶(有時稱爲不止一次與不同的數據集創建各種賬戶),這是鏈接到用戶。傳遞表單數據,通過AJAX

現在我想創建一個帳戶從我的管理面板而不創建一個用戶,所以我想通過ajax(從前端)直接調用saveAccount($ data)並將表單數據作爲PARAMETER傳遞給它(而不是通過請求對象在函數中檢索它),以便我可以使用相同的saveAccount($ data)函數,並且I d o不必創建一個用於Request變量的saveAccount()。這有意義嗎?這可能嗎?如果是這樣,我將如何去做這件事?

我沒有發佈任何代碼,因爲我沒有看到它的需要,這是一個概念性問題,但如果您需要我到目前爲止的代碼或者如果有任何不清楚的地方,我會很樂意詳細說明。

回答

0

對於實例,其中一個控制器功能可以被稱爲或者通過AJAX表單數據或內部由另一控制器功能下述溶液的工作原理:

public function saveAccount($data = null) 
{ 
    if (empty($data)) $data = $this->getRequest()->request->all(); 
    ... 
} 

然後,可以在傳遞一個陣列控制器功能與表單數據數組的格式相同,如果傳遞給函數,它將使用該數據,否則將檢索REQUEST(表單)數據。

0

不應該有任何saveAccount方法,你只依賴於案件實體之間的關係,即在setAccount方法,或到addAccount一個你需要一個實體添加到Collection

然後主義會採取保存和持續照料一切。

保存數據,我會永遠依靠一個RESTful接口[您可以通過FOSRestBundle輕鬆創建],並通過AJAX發送一切不管上;您將最終獲得更流暢的界面和更易維護的代碼。

+0

好吧,我承認我不是一個Symfony的專家,但你的解釋並不完全意義。我的架構是這樣的,一個用戶是一個實體,一個帳戶是一個實體,它們以多對多的關係鏈接。所以在用戶創建期間,我確實使用'$ user-> addAccount($ account);'(有時不止一次,因爲用戶可以鏈接到多個賬戶),但據我所知,您必須先創建該賬戶實體($賬戶),然後才能鏈接它,所以我使用$ account = saveAccount($ data)。 – Magnanimity

+0

您應該在Controller中創建帳戶,然後 - 實體不應負責創建其他實體。當你刷新'entityManager'時,一切都將被正確保存。 – moonwave99