2012-04-12 78 views
0

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

我用在欣赏下面的代码:

$this->set('test',$this->Menu->find('all')); 
print_r($test); 
+0

检索视图内的日期违反了MVC规则。请不要这样做。 – thecodeparadox 2012-04-12 06:48:09

+0

我知道,但要解决我的问题,我只知道这种方式,如果有任何其他方式帮助。 我必须显示一个表中的所有菜单,我有另一个表中的menu_id,我需要将id转换为菜单名称。 – 2012-04-12 06:56:36

+0

我认为我的文章将解决您的问题 – thecodeparadox 2012-04-12 06:58:01

回答

0

在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); 

?> 
+0

我再次收到错误: 致命错误:调用AppHelper.php中的非对象的成员函数find()。 我AppHelper.php增加了$这个 - > loadmodel(“菜单”),但我发现了错误loadmodel是非对象。 – 2012-04-12 06:47:51

+0

请检查我的更新回答 – chetanspeed511987 2012-04-12 07:29:47

+0

我投了一个,因为你给不好的建议,并建议违反MVC。 – burzum 2012-04-12 10:01:16

3

尝试在视图文件中不检索数据。 MVC规则

违反尝试有鉴于此文件:

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

使用此代码视图(ctp)文件不在控制器 – thecodeparadox 2012-04-12 07:02:39

+0

没有违反MVC规则,如何做到这一点functionallity? – chetanspeed511987 2012-04-12 08:39:21

+0

在控制器中查询,然后设置查看。或者在AppController的beforeFilter函数中进行查询,将结果存储在一个变量中,然后使用该变量。 – thecodeparadox 2012-04-12 10:56:07

6

内,您的菜单模式创建一个方法,像使用getMenu()。用这种方法做你的find()并得到你想要的结果。根据需要修改结果并喜欢在getMenu()方法中返回数据。

如果您需要在AppController中:: beforeFilter()或beforeRender()的每个页面上的菜单根本就

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

如果你不需要它无处不在,你可能会去使用requestAction使用获取数据好这个方法来自Menus控制器,它将从模型中调用getMenu()并返回数据。把它设置在你需要的地方会更好,如果你使用requestAction,你也想缓存它。

+0

非常感谢@burzum,你的工作! – 2012-04-12 11:17:20

+0

如果它适合您,请您介意将答案标记为正确吗? – burzum 2012-04-12 13:35:21

+1

@burzum:我投了那个,因为你给了正确的建议,并建议我 – chetanspeed511987 2012-04-13 03:25:31

0

Cakephp不允许这样做。

首先使用ClassRegistry :: init('Model')创建模型的引用(对象); 然后从使用对象调用查找函数

$obj = ClassRegistry::init('Menu'); $ test = $ obj-> find('all'); echo“”;的print_r($测试); `

这将工作。