来自本地数据库和外部源的信息在一个视图中

时间:2011-10-02 19:35:34

标签: php model-view-controller yii

情况:
简化的情况是:考虑一个构建为MVC项目的博客。 YII博客的例子对此很好,但问题不是框架特定的:它没什么特别的;你有一个包含帖子和页面构建的表:

  • 模型(YII将为您提供基本的活动记录设置)
  • 一个控制器,例如构建索引(所有帖子的列表)
  • 最终构建实际HTML的视图(或一些视图)。

现在我有一个工作博客,但我也有一个外部信息来源,我想介绍到同一页面:例如RSS提要。

如何添加此新数据源?

可能的解决方案
为了澄清我正在努力解决的问题,这里有一些我正在考虑的事情

  • 制作一个从两个来源获取信息的新模型
    • 感觉像抵抗/工作最少的方式
    • 需要按日期对博客帖子和RSS项目进行排序
    • 可能需要提供一些关于它是什么类型的项目的标记(RSS项目可能没有作者,但它确实有一个来源)。
    • 以上旗帜感觉不可靠的事实让我相信这些应该是2个型号。
  • 为RSS创建一个新模型并制作一个控制器,它将两个源组合在一起并将其提供给可以处理两种类型帖子的视图
  • 更复杂的东西(可能更具体框架),但帖子的当前视图只是一个帖子的一个视图,它会重复出现。而不是一个处理这两种类型的视图,您可能不仅需要模型,还需要RSS的视图,以及执行所有混合和匹配的控制器(?)?

框架说明:
我正在使用YII,但它并不是关于YII的。当然,如果要做一些复杂的事情,我将不得不在YII中实现它,但它是关于设计和MVC模式,而不是放在;的位置; D

2 个答案:

答案 0 :(得分:0)

如果我必须这样做,我会为视图制作一个新的控制器,并使用两个模型。

  • 我对mvc模式非常陌生,但是从我收集的内容到现在,感觉任何模型都应该只限于一个数据源。除了CRUD操作之外,“业务逻辑”(如果有的话)应该包含在该模型中。这里的业务逻辑意味着适用于与Web应用程序相关的数据源的逻辑,即您提到的内容,例如按日期排序RSS。

  • 创建一个访问这两个模型的控制器,以填充您的视图。

  • 最后,关于Yii,组织mvc的这些组件/模块/部件的最佳方式取决于您的应用程序要求,以及ux。

现在,我认为你也应该把这个问题放在programmers网站上 希望这有帮助!
编辑:不太确定在哪里放置排序,控制器或视图。

答案 1 :(得分:0)

你可以用这样的东西(我也使用yii所以下面的代码跟yii框架一样)

class XyzController extends CController
{
.
.
.
    public function actionAbc()
    {
        .
                .
                .
        $this->render('viewname',array(
            'model1'=>$model1,//for posts frm table
                        'model2'=>$model2 //for rss feed

        ));
    }
}

为了更好地理解,尝试为父视图“viewname”

中的每种类型的帖子呈现两个单独的视图