如何在视图中使用find('all')-CakePHP

如何在视图中使用find('all')-CakePHP,cakephp,views,cakephp-2.0,findall,Cakephp,Views,Cakephp 2.0,Findall,我搜索了很多,但是找不到如何在视图中使用Rails中使用的find'all',但是这里我得到了一个未定义的错误属性:View::$Menu[APP\Lib\Cake\View\View.php,第804行] “Menu”是我用来从menus表中获取数据的模型 我在视图中使用以下代码: $this->set('test',$this->Menu->find('all')); print_r($test); 在AppHelper中 做一个下面的函数 function getMen

我搜索了很多,但是找不到如何在视图中使用Rails中使用的find'all',但是这里我得到了一个未定义的错误属性:View::$Menu[APP\Lib\Cake\View\View.php,第804行] “Menu”是我用来从menus表中获取数据的模型

我在视图中使用以下代码:

$this->set('test',$this->Menu->find('all'));
print_r($test);
在AppHelper中

做一个下面的函数

function getMenu()
{

    App::import('Model', 'Menu');
    $this->Menu= &new Menu();
$test  = array();
$test = $this->Menu->find('all');
return $test;
}
在视图中使用上述功能,如:

<?php

 $menu = $html->getMenu();
 print_r($menu);

 ?>
尝试不检索视图文件中的数据。违反MVC规则

在视图文件中尝试以下操作:

$menu = ClassRegistry::init('Menu');
pr($menu->find('all'));

在菜单模型中创建一个方法,类似于getMenu。在这个方法中,你可以找到你想要的结果。在getMenu方法中根据需要修改结果并返回数据

如果在AppController::beforeFilter或beforeRender中的每个页面上都需要该菜单,只需执行以下操作

$this->set('menu', ClassRegistry::init('Menu')->getMenu());

如果您不需要在任何地方都使用它,那么使用此方法从菜单控制器获取数据可能会更好,该控制器将从模型调用getMenu并返回数据。在需要的地方设置它会更好,如果您使用requestAction,您也很可能希望缓存它。

Cakephp不允许这样做

首先使用ClassRegistry::init'model'创建模型的referenceobject; 然后使用对象调用find函数

$obj=ClassRegistry::init'Menu'; $test=$obj->find'all'; 回响打印测试`


这将起作用。

我再次遇到错误:致命错误:调用AppHelper.php中非对象的成员函数find。我在AppHelper.php中添加了$this->loadmodel'Menu',但我得到的错误是loadmodel是非对象的。我投票否决了这个选项,因为你给出了错误的建议,并建议违反MVC。@burzum:谢谢大家。我得到了it@chetanspeed511987感谢您的回复,我不知道AppHelper可以做这么多,这真的很有帮助。在视图中检索日期违反了MVC规则。请不要这样做。我知道,但要解决我的问题,我只知道这个方法,如果有任何其他方法请帮助。我必须显示一个表中的所有菜单,我有一个来自另一个表的菜单id,我需要将id转换为菜单名。我想我的帖子会解决你的问题为什么你不能在控制器中检索数据,就像你应该做的那样?在诉诸于在视图文件中获取数据之前,我会重新考虑几次你是否真的不能在控制器操作中获取数据。但是,如果必须的话,我建议使用RequeStation,在2.0上找不到具有适当缓存的书籍页面。如果不违反MVC规则,如何实现此功能?在controller中查询,然后设置为view。或者在AppController的beforeFilter函数中进行查询,将结果存储在一个变量中,然后使用该变量。如果答案对您有效,您介意将其标记为正确吗?@burzum:我之所以选择这个答案,是因为您给出了正确的建议和建议