我有一个控制器(对于我的主页),其中我有大约5-6个动作,呈现相同的视图(索引),因为用户可能会选择不同的参数在页面上的不同情况。每个操作处理每种情况。
现在我需要在我的主页上显示最新的新闻。看起来很简单。所以我加了一个
$this->set('fetchednews', $this->News->getLatestNews());添加到我的索引操作中,它就像它应该的那样工作。
但正如我之前所说的,对于这个页面,我有一组不同的操作,具有相同的视图。
因此,如果用户转到domain.com,他会看到最新的新闻,但如果用户单击链接,例如
domain.com/mainPageController/sortById/1 他没有看到最新消息,因为
action sortById没有$this->set('fetchednews',$this->News->getLatestNews());
我是否应该使用元素,并在元素中使用
$news = $this->News->getLatestNews();然后在索引视图中使用此元素?或者我需要重复一遍
$this->set('fetchednews', $this->News->getLatestNews());添加到我的主页面控制器中的每个操作?
如何正确处理这种情况?
发布于 2012-09-21 04:47:09
假设所有操作都需要设置fetchednews,那么使用beforeFilter如何
function beforeFilter() {
$this->set('fetchednews', $this->News->getLatestNews());
}发布于 2012-09-21 03:36:59
如果我是你,我会把所有需要共享的功能打包到一个新方法中,这个方法接受你的控制器作为参数,然后执行常见的操作。您仍然需要来自需要新闻的每个操作的调用,但至少您可以修改它/在单个位置添加额外的代码……
我不熟悉蛋糕,因为我自己倾向于使用CI,但类似于...
function MyAction1() {
//Other code
$this->CommonCode();
}
function CommonCode() {
$this->set('fetchednews', $this->News->getLatestNews());
}或者,如果您希望将函数移到控制器之外(以避免将其解释为操作本身),请将控制器传递到方法中……
function MyAction1() {
//Other code
CommonCode($this);
}
//Different class
function CommonCode($controller) {
$controller->set('fetchednews', $this->News->getLatestNews());
}https://stackoverflow.com/questions/12519647
复制相似问题