我有一个控制器(对于我的主页),其中我有大约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());
我添加到主页控制器的每个操作?
如何妥善处理这种情况?
答案 0 :(得分:1)
假设所有操作都需要设置fetchednews
?
beforeFilter
怎么样?
function beforeFilter() {
$this->set('fetchednews', $this->News->getLatestNews());
}
答案 1 :(得分:0)
如果我是你,我会将需要共享的所有功能包装到一个新方法中,该方法将控制器作为参数,然后执行常见操作。您仍然需要来自每个需要新闻的操作的电话,但至少您可以在一个地方修改它/添加其他代码......
我不熟悉Cake,因为我倾向于自己使用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());
}