首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CakePHP -如何在这种情况下不违反MVC或DRY

CakePHP -如何在这种情况下不违反MVC或DRY
EN

Stack Overflow用户
提问于 2012-09-21 03:31:56
回答 2查看 74关注 0票数 0

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

现在我需要在我的主页上显示最新的新闻。看起来很简单。所以我加了一个

代码语言:javascript
复制
$this->set('fetchednews', $this->News->getLatestNews());

添加到我的索引操作中,它就像它应该的那样工作。

但正如我之前所说的,对于这个页面,我有一组不同的操作,具有相同的视图。

因此,如果用户转到domain.com,他会看到最新的新闻,但如果用户单击链接,例如

代码语言:javascript
复制
domain.com/mainPageController/sortById/1 

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

代码语言:javascript
复制
action sortById

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

我是否应该使用元素,并在元素中使用

代码语言:javascript
复制
$news = $this->News->getLatestNews();

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

代码语言:javascript
复制
$this->set('fetchednews', $this->News->getLatestNews());

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

如何正确处理这种情况?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-21 04:47:09

假设所有操作都需要设置fetchednews,那么使用beforeFilter如何

代码语言:javascript
复制
function beforeFilter() {
    $this->set('fetchednews', $this->News->getLatestNews());
}
票数 1
EN

Stack Overflow用户

发布于 2012-09-21 03:36:59

如果我是你,我会把所有需要共享的功能打包到一个新方法中,这个方法接受你的控制器作为参数,然后执行常见的操作。您仍然需要来自需要新闻的每个操作的调用,但至少您可以修改它/在单个位置添加额外的代码……

我不熟悉蛋糕,因为我自己倾向于使用CI,但类似于...

代码语言:javascript
复制
function MyAction1() {
    //Other code
    $this->CommonCode();
}

function CommonCode() {
    $this->set('fetchednews', $this->News->getLatestNews());
}

或者,如果您希望将函数移到控制器之外(以避免将其解释为操作本身),请将控制器传递到方法中……

代码语言:javascript
复制
function MyAction1() {
    //Other code
    CommonCode($this);
}

//Different class
function CommonCode($controller) {
    $controller->set('fetchednews', $this->News->getLatestNews());
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12519647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档