2011-11-16 110 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