2012-11-13 55 views
0

在cakephp [2.2]我已經烘烤了所有東西,而我的「人物」視圖中關係和手機以及地址和其他相關數據相當繁忙。我確實希望在人物視圖中顯示所有這些信息,儘管不完全在烘焙佈局中。元素或視圖擴展或其他東西?參考應用?

  1. 我應該如何處理相關數據的這些部分?我不確定我是否應該使用元素或擴展視圖或插件或什麼,我有點新,並且文檔對於我(在我的級別)不清楚應該在什麼時候使用。烘焙的代碼似乎是一個單一的方法,所以我沒有得到很多幫助在那裏。
  2. 一旦用戶選擇從人員視圖的列表中編輯電話號碼(例如),它會將他們帶到電話編輯視圖,然後將其返回到電話列表(索引視圖),而不是人員視圖他們在上。我如何讓他們回到人物視圖呢?
  3. 他們提供的博客示例很不錯,但是有沒有一個「參考」應用程序用於cakephp,演示各種功能的最佳實踐?我找不到一個,或者不只是一個簡單的應用程序示例。

謝謝,我欣賞指導。

回答

1

這是一個相當寬泛的問題,但我會試着回答它。我不確定你編程知識有多高級,所以請原諒我,如果我正在重新調整你已經知道的事情。首先,當我第一次開始使用框架時,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));