0

我有一个控制器(用于我的主页),其中我有大约 5-6 个操作来呈现相同的视图(索引),因为用户可能会在不同的情况下在页面上选择不同的参数。每个动作处理每种情况。

现在我需要在我的主页上显示最新消息。看起来很简单......所以我添加了

$this->set('fetchednews', $this->News->getLatestNews());

到我的索引操作,它应该按原样工作。

但正如我之前所说,我有一组具有相同视图的不同操作。

因此,如果用户访问 domain.com,他会看到最新消息,但如果用户单击链接,例如

domain.com/mainPageController/sortById/1 

他没有看到最新消息,因为

action sortById

没有 $this->set('fetchednews', $this->News->getLatestNews());

我应该使用 Elements 并在 Element 中使用

$news = $this->News->getLatestNews();

然后在索引视图中使用这个元素?或者我需要重复

$this->set('fetchednews', $this->News->getLatestNews());

我添加到我的主页控制器的每个操作?

如何正确处理这种情况?

4

2 回答 2

1

beforeFilter假设所有操作都需要设置,那么使用 a 怎么样fetchednews

function beforeFilter() {
    $this->set('fetchednews', $this->News->getLatestNews());
}
于 2012-09-20T20:47:09.437 回答
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());
}
于 2012-09-20T19:36:58.777 回答