我的布局/ default.ctp文件中有一个用于侧边栏导航的元素,我需要从我的Photos控制器访问一些有关类别的数据。我该怎么做呢?
答案 0 :(得分:2)
请小心requestAction,除非您有效地使用缓存,否则每次调用它时都会使应用程序变慢,因为它会启动一个全新的请求周期。
Travis Leleu的回答将是标准的做事方式。但是,如果您必须将数据(为了便携性或任何原因)导入到元素中,那么requestAction不是可行的方法。
由于您没有执行必须在控制器中的任何业务逻辑,我强烈建议您将模型类导入并将其作为单例实例化到元素中。您可以使用ClassRegistry :: init();
执行此操作$Photo = ClassRegistry::init('Photo');
$Photo->find('all');
如果您需要对数据进行任何其他处理,您应该在模型本身中使用Cakes afterFind回调或在Photo模型中制作自定义方法:
class Photo extends AppModel {
function customFind () {
$photos = $this->find('all');
foreach ($photos as $photo) {
//processing code here...
}
}
}
然后在你的元素中调用它:
$Photo = ClassRegistry::init('Photo');
$Photo->customFind();
基本上我想在这里遇到的唯一情况是requestAction是合适的,你需要做重定向或使用组件的事情。
如果您只是检索和/或操作数据,那么它就属于模型。
答案 1 :(得分:1)
您可以将layous / default.ctp视为普通模板,然后输入
<?php echo $this->element('your element'); ?>
你需要的地方。
b.t.w,使用:
$data = $this->requestAction('controller/action');
访问数据
答案 2 :(得分:0)
您可以将数据发送到您的元素。例如,在default.ctp中:
<?php echo $this->element('side_nav', $your_data); ?>
在您的side_nav.ctp中,您可以处理该数据。
答案 3 :(得分:-1)
为什么你不这样做的标准派对约定呢?
在控制器中,
$ this-&gt; set('categories',$ this-&gt; Photos-&gt; find(...));