2010-03-16 61 views
1

我有一个元素用于从我的layouts/default.ctp文件调用我的侧栏导航,我需要从我的Photos控件中访问一些关于类别的数据。我会如何去做这件事?从一个元素访问控制器数据

回答

1

您只需把您的layous/default.thtml中作为一个正常的模板,并把

<?php echo $this->element('your element'); ?> 

在你需要它。

b.t.w,使用方法:

$data = $this->requestAction('controller/action'); 

访问数据

+0

对不起,也许我应该澄清。我正在使用<?php echo $ this-> element('side_nav'); ?>在我的layouts/default.ctp中我需要获取该元素,在'elements/side_nav.ctp'中访问从Photos控制器检索的数据。 – trobrock 2010-03-16 02:55:37

+0

@ trobrock,你有没有试过使用: “$ data = $ this-> requestAction('photos/someaction');”在元素中获取数据? – Young 2010-03-16 03:08:04

+0

我没有,我会尝试。对不起,我错误地阅读了你的答案 – trobrock 2010-03-16 03:34:04

-1

为什么你不只是做标准的蛋糕约定呢?

在控制器中,

$这个 - >设置( '类',$这个 - > Photos->找到(...));

2

请注意requestAction,除非您有效地使用缓存,否则它会真的减慢应用程序的速度,因为每次调用它时都会启动一个全新的请求周期。

Travis Leleu的回答将是标准的做事方式。但是,如果您必须将数据(用于可移植性或任何原因)导入到元素中,那么requestAction不是要走的路。

由于您没有执行必须在控制器中的任何业务逻辑,我强烈建议您将模型类作为单例导入并实例化到元素中。你可以使用ClassRegistry :: init();

$Photo = ClassRegistry::init('Photo'); 
$Photo->find('all'); 

如果你需要做数据的任何额外的处理,你应该做的是,在模式本身或者使用蛋糕一个afterFind回调或在你的照片模型制作一个自定义的方法:

class Photo extends AppModel { 

    function customFind() { 
     $photos = $this->find('all'); 
     foreach ($photos as $photo) { 
      //processing code here... 
     } 
    } 

} 

然后调用它在你的元素:

$Photo = ClassRegistry::init('Photo'); 
$Photo->customFind(); 

基本上我试图让跨这里是requestAction是适当的唯一情况是,你需要做的事情一样redirec或使用组件。

如果您只是检索和/或操作数据,那么它属于模型。

0

您可以发送数据到您的元素。例如在你的default.ctp中:

<?php echo $this->element('side_nav', $your_data); ?> 

并且在你的side_nav.ctp中你可以处理那些数据。

相关问题