【发布时间】:2014-06-28 01:46:05
【问题描述】:
我目前正在尝试了解 MVC 框架在 PHP 中是如何工作的。因此,我创建了这个我如何think 的基本草图,即 MVC 是在 PHP 中实现的:
[我知道缺少一些步骤,例如Router如何解析 route 以了解要加载的 View 和 Controller,但这些步骤是基于技术的,对于理解 PHP 中 MVC 的一般流程并不重要。 em>]
我从article series 中得出我对 PHP 中的 MVC 的理解。但是,我认为这种结构与人们在谈论 PHP 中的 MVC 时所想到的大多数结构不同,因为这个article(文章基本上指出不仅Controller,还有View确实与Model 通信)。
我现在想问你几个问题:
- 这通常是一种
right在PHP中实现MVC的方式吗? - 如何向此方法添加登录/注销系统?这样未登录的用户将始终看到 LoginView,而 登录的用户可以看到不同的视图? (我知道登录系统是如何工作的,但我不知道将其放置在 MVC 中的何处,因此我不必多次插入代码,例如在每个控制器中。 )
- 如果我的应用程序包含多个始终加载的元素(比如用户栏 [带有用户名、设置链接等]、导航和内容容器),该怎么办?如何将这些元素组合成最终视图? (我想到的唯一想法是在每个视图中分别组装最终视图,但这意味着我必须在每个视图中多次插入代码,这没有抓住重点MVC,不是吗?)
- 如果我想在我的应用程序中使用 AJAX 怎么办?我的想法是通过框架发送 ajax 请求,同时只访问为 ajax 制作的控制器和视图?换句话说,
AjaxViews只返回例如json objects和AjaxControllers总是希望验证码证明这些 ajax 调用是合法的?
我知道已经有人问了很多关于 PHP 中的 MVC 的问题,我一直在安静地阅读很多文章,但我认为只有阅读不会让我完全理解MVC。
此外,在阅读了上面链接的文章之后,我不再确定我在网上找到的其他关于 MVC 的文章是否确实与上面的文章以相同的方式解释了 MVC。因为如果他们不这样做,我会在阅读两种或多种不同的方法时尝试理解一个框架。
非常感谢您花时间回答我的问题!
--- --- --- 更新 --- --- --
根据下面的答案,我更改了 MVC 草图。以防万一有人发现此链接并想了解更多信息。
【问题讨论】:
-
您所描述的不是 MVC,而是各种 Rails 克隆。这是一个骗子。有大量 StackOverflow 帖子的用户认为他们了解了 MVC 是什么,但被声称 MVC 但甚至不是远程的流行框架的不良营销所欺骗。一方面,模型不是数据库的持久层,控制器不应该在模型和视图之间进行调解(也不应该传递数据)。视图应该对模型的变化做出反应。 stackoverflow.com/questions/18048960/…
-
@RonniSkansing - 我想我没有提到流行框架的任何营销,是吗?请告诉我。此外,我认为我的控制器没有在模型和视图之间进行调解,也没有将数据从模型传递到视图。你是从我的草图中解释的吗?比我的草图可能不精确,我需要改进它。正如我所说的 PHP 中的 MVC 没有观察者结构,因为当一个动作被触发时整个应用程序被重新加载(例外:AJAX),所以这就是为什么视图不需要对模型的变化做出反应,是吗? ?
-
完全正确,您没有提到任何框架。你的画也很好,一开始就被误读了。在我看来,php 和服务器端语言中确实没有 MVC,有些人称它为 web mvc,但实际上它们是 rails 克隆。试图将整个过程粘在字母 mvc 中确实不适合在浏览器中单击某些内容、使其发送请求、处理请求、在无状态 http 后刷新视图等完整过程。
-
Front Controller 也可以是它自己的模式,所以我不会将它放入 MVC 草图中,而不会使其与众不同:en.wikipedia.org/wiki/Front_Controller_pattern