【问题标题】:model calling view, or view calling model?模型调用视图,还是视图调用模型?
【发布时间】:2015-05-02 21:23:13
【问题描述】:

在我以前拥有全 ajax 网络应用程序的公司中,使用了一个从头开始的框架。刷新页面部分的方式是您使用字符串调用控制器,控制器将加载一个或多个视图文件。视图文件几乎总是会调用模型中的一个或多个类。这是我到达那里时的样子。

我现在正在与一家新公司合作开发新系统并寻找候选框架。一个 30 分钟的 codeigniter 教程展示了控制器调用模型,以及模型加载视图。

这与我的经验相反,所以我想问一下哪种策略更常见。在我看来,视图是一个“外壳”或结构似乎更合理,但仅限于需要模型来获取业务规则。

我不确定我是否应该在这里分享一个链接,我不是想推广 codeigniter,但该教程位于 https://www.youtube.com/watch?v=47VOtKiw9AQ 大约 10:00。谢谢

【问题讨论】:

  • 上次我检查该视图用于显示信息并可能收集一些信息(将传递给控制器​​)​​。但是视图不应该直接调用模型或控制器。分开你的责任。
  • 同意@AndreiP。控制器是“核心部件”。它必须是调用模型并加载视图的那个。模型应该调用的唯一东西是 db。 View 从不调用任何东西。 See what the doc say
  • 对于 CodeIgniter,最常见的标准是,控制器调用模型来检索数据,然后将其传递给视图。视图和模型之间不应有任何直接联系。
  • 我想你搞糊涂了。此类在不是您的模型中称为 Site。在这种情况下,Site 是您的控制器。控制器正在加载视图。如果需要任何数据,控制器将首先从模型中收集该数据,并将其加载到视图中。也许你感到困惑的原因是因为你的旧公司的自定义框架被设计为更多地使用 ajax,这导致你认为“视图是第一位的”。 AJAX 调用实际上来自视图,但在这种情况下,它会触发控制器,然后控制器会收集数据并将其返回给视图。
  • @tereško,感谢您的分析。我理解你的观点。 CI 确实缺少许多组件,从高级开发人员的角度来看,我会同意.. 但是,我确实相信它是一个很好的框架,与过程编码相比,它提供了对 MVC 的更深入理解的良好过渡.您推荐哪些 PHP 框架以及为什么?

标签: php codeigniter model-view-controller


【解决方案1】:

教程。有很多。

控制器调用模型并将数据传递给视图。这就是标准答案。但是我现在倾向于 - 控制器分配特定的视图,然后调用模板,传递 $data。

然后在模板中——调用模型来为该模板创建导航栏,以及可选的页面显示模型。

否则 - 要么你有 my_controller ,所有东西都可以通过它调用页面显示、导航等。

或者您必须将页面显示详细信息放在每个控制器中。我个人不是 my_controller 设计模式的忠实拥护者,在复杂控制器中调用导航栏并不是最佳的。

所以在这种情况下,可能被视为视图的东西——一个简单的模板文件——将调用一个模型。但在这种情况下,它并不是真正的“视图”,因为它没有直接显示任何东西——模板正在调用导航视图、页眉、页脚视图等——然后实际的页面内容由控制器分配。

这还为您提供了更多的可移植性 - 当您需要更改有关页面显示或导航的详细信息时,您只需转到一个地方。

最后有很多 php 框架和很多意见。经过长时间的休眠后,codeigniter 框架正在积极开发中。但是,如果您从一开始就看看 Node,它具有一些引人注目的功能,具体取决于您的用例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-02
    • 2016-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多