如果來自不同控制器的視圖使用相同的元素,要求不同的控制器將相同的數據傳遞給視圖(因此可能進行相同的處理),那麼製作一個視圖會不會更好AJAX調用單個控制器?CakePHP - 使用元素渲染視圖vs ajax
比方說,我們有這樣的:
- 型號/ post.php中
- 型號/ user.php的
- 型號/ Service.php
- 控制器/ UsersController.php
- 控制器/ ServicesController.php
- Views/Users/view.ctp
- Views/Services/view.ctp
- 查看/元/ list_users_post.ctp
一個用戶屬於一個服務,用戶有很多帖子。 在Views/Services/view.ctp
中,我想要顯示特定服務的每個用戶的列表,以及每個用戶的一些相關信息和他最後10個帖子的列表。 在Views/Users/view.ctp
中,我想要顯示用戶的相關信息和他最後10個帖子的列表。 元素Views/Elements/list_users_post.ctp
允許我將顯示用戶帖子表的代碼分解。它需要設置var $userPostList
,並且結構與$this->Post->find('all', array('conditions' => array('user_id' => $userId)))
的結果相同。 因此,在我的UsersController::view($userId)
和ServicesController::view($serviceId)
操作中,我最終得到了一些重複的代碼來檢索用戶的帖子。
我認爲重構代碼以使動作ServicesController::view($serviceId)
不以Post模型的任何發現,而是認爲Services/index.ctp
使得AJAX調用到行動UsersController::view($userId)
爲每個用戶。這樣,沒有更多重複的代碼,但與AJAX調用的開銷。
有什麼想法?
是的,這已經是一些棘手的發現,要求例如要求幾個模型。但是這並不妨礙在多個控制器中放置相同的代碼(儘可能小)。使用元素的其他缺點之一是變量轉發...當您有嵌套元素時,必須爲頂層元素提供子元素所需的所有變量,因此會嚴重耦合元素。我只看到AJAX來防止這種情況發生,但是,呃,我想知道這個開銷... – paflechien 2014-10-31 13:34:46