PHP中的MVC - 一般理解和具体问题

时间:2014-05-10 09:45:02

标签: php model-view-controller

我目前正在尝试了解MVC框架如何在PHP中运行。因此,我已经创建了如何think 这个MVC在PHP中实现的基本草图:

Sketch of how MVC in PHP may be implemented

[我知道缺少一些步骤,例如Router如何解析route以了解要加载的ViewController,但这些步骤是基于技术的,并不是很重要,以便了解一般情况PHP中的MVC流程。]

我从这个article series中了解了我对PHP中MVC的理解。但是,我认为这个结构与大多数人们想到的结构不同,当他们在PHP中讨论MVC时,因为这个article(文章基本上说明了Controller而且View确实与Model进行了沟通。

我现在想问你的是几个问题:

  1. 这通常是 right在PHP中实现MVC的方式吗?
  2. 如何为此方法添加登录/注销系统?因此,登录的用户将始终看到LoginView,而 登录的用户可以看到不同的视图? (我知道登录系统是如何工作的,但是我无法弄明白放在MVC中,所以我不必多次插入代码,例如在每个控制器中。)
  3. 如果我的应用程序包含多个元素(例如用户栏[带有用户名,链接到设置等],导航和内容容器),那么该怎么办?如何将这些元素组合到最终视图中? (我想到的唯一想法是分别在每个视图中组装最终视图,但这意味着我必须在每个视图中多次插入代码,这会忽略这一点MVC,不是吗?)
  4. 如果我想在我的应用程序中使用AJAX怎么办?我的想法是通过框架发送ajax请求,同时只访问为ajax创建的控制器和视图?换句话说,AjaxViews仅返回例如json objectsAjaxControllers总是希望验证码能够证明这些ajax调用是legtitim吗?
  5. 我知道已经有人问过几十个关于PHP的MVC的问题而且我一直在读很多文章,直到现在,但我认为只有阅读不能让我完全理解MVC

    此外,在阅读上面链接的文章之后,我不再确定我在网上找到的其他关于MVC的文章是否以与上述文章相同的方式解释MVC 。因为如果他们不这样做,我会在阅读两个多个不同的方法时尝试理解一个框架。< / p>

    非常感谢您抽出时间回答我的问题!

    - --- ---更新--- --- -

    根据下面的答案,我改变了我的MVC草图。以防有人找到此链接并想了解更多信息。

    enter image description here

2 个答案:

答案 0 :(得分:4)

让我先回答你的问题,然后再接受它。

  1. 没有正确的编写MVC的方式。有很多风格和变化,在谈论 web MVC时甚至成倍增加。
  2. 关于登录和注销。我认为最强大的系统是基于角色的访问控制和访问控制列表,请参阅How can I implement an Access Control List in my Web MVC application?
  3. 通常有两种方法,要么控制器和视图之间的比例为1:1,然后在Controller完成后,您的引导脚本会调用具有相同名称的View(LoginController,LoginView),或者您的Controller返回视图名称以及操作和参数,由引导程序调用。然后视图选择一个模板,该模板可以包含其他子模板(如用户栏或页脚)。
  4. 在这种情况下,您的视图需要能够根据Accept: HTTP标头选择不同的模板(并在您的AJAX请求中发送类似Accept: application/json的内容)。然后,您的视图将返回JSON模板而不是HTML模板。

  5. 你的草图有什么问题?

    您的模型不仅仅是数据库的网关,而是所有逻辑发生的地方。所有的计算。请参阅另一个解释How should a model be structured in MVC?的优秀答案。

    MVC的想法是简单地将您的应用程序分为三层:输入(控制器),逻辑(模型)和输出(视图)。这是按照PHP工作的常规方式进行扩展(这是一个请求,给我一个响应,都在同一页面中)。

    出于这个原因,实施细节可能会有所不同,这个概念很重要。 “Web MVC”仅仅是几十年前人们组成的良好OOP实践和一些命名惯例的结果。

答案 1 :(得分:0)

它具有并行开发和代码重用能力。您的系统如何工作以及用户如何工作存在关注的分离。这提供了问题的解决方案。现在有边界,MVC。