這是一個相當寬泛的問題,但我會試着回答它。我不確定你編程知識有多高級,所以請原諒我,如果我正在重新調整你已經知道的事情。首先,當我第一次開始使用框架時,this article非常有幫助,因爲它解釋了代碼應該在哪裏以及爲什麼。這是我見過的「參考應用程序」中最接近的一個,它實際上是一個很好的學習工具。您可以嘗試查看一些更高級的Cake應用程序,如Croogo(基於Cake的CMS)。但是代碼庫肯定有點複雜。
就我個人而言,如果要在不同的視圖中實際重用它們,我會使用元素。然而,問題在於爲其元素提供元素。有一種方法稱爲requestAction
,但即使是手動狀態,也應該使用這種方法,並結合使用緩存。問題在於,在不同的元素中使用很多requestAction
調用會使控制器的方法枯竭,並且不會遵循"Skinny Controllers, Fat Models"的口頭禪。
我會將大部分相關的數據調用放在它們各自的模型中,並從Controller調用這些模型方法並將它們提供給View。假設你想要10個最新的PhoneNumbers和相關的用戶。
您的PhoneNumber模型中會有一個方法,它返回一組用戶及其電話號碼。使用Containable behaviour限制返回的相關型號的數量。下面的代碼是一個例子,所以實際執行情況可能會有所不同:
public function getRecentPhoneNumbers($limit=10) {
$phoneNumbers = array();
$phoneNumbers = $this->find('all', array(
'limit' => $limit,
'contain' => array('User'),
'order' => 'PhoneNumber.id DESC'
));
return $phoneNumbers;
}
如果******中國和用戶模型正確關聯,你將能夠調用getRecentPhoneNumbers()
從用戶模式:
$this->PhoneNumber->getRecentPhoneNumbers(10)
還是從用戶控制器:
$this->User->PhoneNumber->getRecentPhoneNumbers(10)
假設你有其示出了這10個編號的列表的元素,它接受一個稱爲$recentPhonenumbers
變量,則設置在相關UsersController方法變量與來自getRecentPhoneNumbers
呼叫返回的數組:
$this->set('recentPhonenumbers', $this->User->PhoneNumber->getRecentPhoneNumbers(10));
這將使其可用於包含該元素的視圖。
擴展視圖是相對較新的(從Cake 2.1開始),我沒有使用它們,但似乎是創建條件標記的好方法。
至於第二個問題,將用戶重定向到人視圖,而不是索引視圖。這是在Controller的edit()
方法中調整重定向(see the manual獲取更多詳細信息)的問題。標準烘焙的edit()方法接受一個$id
參數,您可以使用它重定向到view()
(它可能也接受$id
參數)。
所以重定向可能看起來是這樣的:
$this->redirect(array('controller' => 'users', 'action' => 'index'));
將其更改爲:
$this->redirect(array('controller' => 'users', 'action' => 'view', $id));