2011-11-16 111 views
2

由於客戶希望擁有違反Cake邏輯的URL,我決定使用從cake/libs複製的pages_controller.php來組織我的應用。 該網站的大部分功能都發生在一個使用ajax調用不同控制器的url上,因此我選擇了Pages作爲主頁。模型導入到控制器後,cakePHP模型關聯丟失

頁面沒有模型,但我仍然需要訪問一些相關模型,以便導入它們。

我已經嘗試了所有三種方法:

$this->loadModel('Inventories'); 
---- 
$Inventories =& ClassRegistry::init('Inventories'); 
---- 
App::import('Controller', 'Inventories'); 
$Inventories = new InventoriesController; 

存貨模型似乎負荷罰款與各可是當我找到一些記錄:

$(...)->find("all", array(
    'conditions' => array('id' => '1'), 
    'recursive'=>2) 
); 

我只得到結果,如果遞歸已經設置爲-1或好像沒有關聯的模型。 無論我設置什麼遞歸,都會發生這種情況。 當我在另一個控制器中加載模型時,我得到了適當的遞歸響應。

任何想法如何我可以從pages_controller.php完全訪問模型?

回答

0

一片狼藉,但即時的解決辦法是簡單地填充在控制器的$uses陣列:

var $uses = array('Inventories', 'User'); // or whatever models need to be loaded 

這被認爲是不良的做法和但可能很快失控。快速測試非常方便。

你可以把功能在適當命名的控制器,然後途徑客戶的期望URL以相應的控制器/動作:

http://book.cakephp.org/view/945/Routes-Configuration

一個鮮爲人知的控制方法(它不是在食譜,只有API)稱爲setAction()可能是您的解決方案。請參閱:

http://api13.cakephp.org/class/controller#method-ControllersetAction

也蛋糕2.0

http://api20.cakephp.org/class/controller#method-ControllersetAction

+0

是,使用$使用的是正確的方式。這是推薦的方式,不是不好的做法!雖然創建使用gadzillion模型和組件的胖控制器是一個不好的做法。每個控制者應該有一個明確的目標,一個明確的和短的行動,沒有什麼會失去控制。 – sibidiba

+0

@Sibidiba - 如果您閱讀OP對問題的描述,他會使用Pages控制器明確地爲其路由器顯示客戶希望的任何url,這意味着他將其用作訪問衆多模型的超級控制器。在Cake中這是一個棘手的情況,儘管$使用起來並且至少現在會解決他的問題,請參閱http://book.cakephp.org/view/961/components-helpers-and-uses。 – OpenSorceress