Php 需要对MVC模式有一点了解吗

Php 需要对MVC模式有一点了解吗,php,oop,model-view-controller,design-patterns,controller,Php,Oop,Model View Controller,Design Patterns,Controller,您有以下URL: 我是否必须始终调用控制器,或者我是否可以调用视图并在视图内或引用此视图的引导文件中实例化控制器 我不明白的是,如果视图上需要多个控制器,如何存档 例如: 在我的索引页面上,我想运行一个简单的CMS,管理员可以在这里更改网站的文本块和图像。这将在内容管理控制器上。 在我的索引页上,我还得到了最新添加的产品“玻璃酸”,它将由控制器产品控制。 如果我定义www.site.com/contentmanagement或www.site.com来运行contentmanagement控制

您有以下URL:

我是否必须始终调用控制器,或者我是否可以调用视图并在视图内或引用此视图的引导文件中实例化控制器

我不明白的是,如果视图上需要多个控制器,如何存档

例如: 在我的索引页面上,我想运行一个简单的CMS,管理员可以在这里更改网站的文本块和图像。这将在内容管理控制器上。 在我的索引页上,我还得到了最新添加的产品“玻璃酸”,它将由控制器产品控制。 如果我定义www.site.com/contentmanagement或www.site.com来运行contentmanagement控制器,产品控制器将如何调用

还有一个例子。在我的菜单上,我得到了一个名为aboutus的页面链接,这将是一个简单的页面,唯一需要的功能是内容管理控制器来管理文本块

如果我按照我读到的所有地方的模式,我将以如下链接结束: ?

这里有点迷路了,因为这个URL看起来肯定很奇怪。将更容易有URL调用视图和引导文件,我可以告诉控制器,当冲浪者在那里时应该加载

引导看起来像:

交换机($view) 案例:索引 控制器负载管理 控制器负载乘积 案例:aboutus 控制器负载管理

谢谢你的帮助和帮助,谢谢


顺便说一句,我用PHP编写代码。

您正在寻找的是调用,有几个框架可以实现这一点,如

另见这个问题:


Hm,如果您想要站点(一个控制器)的文本块和图像,以及产品(第二个控制器),请在一个控制器中调用所需的方法

我会这样做:当您请求包含上述所有元素的索引页时,实际上会调用一个控制器,它决定显示哪个视图。。因此,在该控制器中,您可以调用所需的所有方法,获取数据,并将其传递给视图。。如果这些方法是从其他控制器调用的,只需调用这些方法并获取数据。。我经常在控制器中创建一些静态方法,我可以在任何地方调用这些方法,所以我不必实例化整个对象

例如,您调用www.site.com/contentmanagement,调用控制器,它将显示索引视图,在该控制器中,您调用您需要的所有方法,准备数据,并将数据传递到最终视图,最终视图将显示

我是否需要一直呼叫控制器,或者我可以(…等等…)

这取决于你对“电话”的理解

控制器需要能够更改视图和模型的状态。 每个视图都需要能够从模型请求数据(在Model2 MVC中)

Think Controller不应该导致视图的呈现(这在所有RoR马屁精中都很常见),就像View不需要在控制器上执行操作一样

我不明白的是,如果视图上需要多个控制器,如何存档

视图和控制器应具有1:1的关系。如果您的视图需要不止一个控制器,您可能需要研究HMVC体系结构

例如:在我的索引页面上,我想运行一个简单的CMS,(…更多废话…)如何调用产品控制器

CMS应该是一个具有多个控制器的独立应用程序(或至少是模块)

如果我按照我读到的所有地方的模式,我将以如下链接结束:


为什么不只是(其中2是“关于我们”页面的ID)。没有法律规定网站管理的URL结构必须镜像公开可用的页面。。地狱。。它实际上会增加脆弱性

我要试着走路

我不明白的是,如果视图上需要多个控制器, 如何存档

例如:在我的索引页面上,我想运行一个简单的CMS,其中管理员 可以更改网站的文本块和图像。那是开着的 内容管理控制器。在我的索引页上,我还得到了 最新添加的产品硫酸钠,将由 控制器产品。如果我定义www.site.com/contentmanagement或 www.site.com要运行contentmanagement控制器,产品将如何运行 控制器会被调用吗

让URL包含控制器的名称确实很好,但这不是MVC的要求。因此,您不必将控制器映射到URL本身。经典的MVC不依赖于特定的命名约定,因此您可以通过不同的URL调用产品控制器,然后处理产品并显示产品的视图。对于MVC来说,重要的是要有一个控制器来处理模型集,并生成一个视图作为表示层。在您的特定示例中,您的入口点似乎是一个与ContentManagement和产品类/模块交互的单个控制器,由此产生的交互生成一个视图

bootstrap would look like: switch($view) case: index controller load contentmanagement controller load product case: aboutus controller load contentmanagement 引导看起来像: 交换机($view) 案例:索引 控制器负载管理 控制器负载乘积 案例:aboutus 控制器负载管理 因此,您在上面的原始交互并没有完全关闭,只是您并没有真正调用两个控制器,而是在点击索引时执行以下操作:

  • 加载一个控制器,我们称之为IndexController
  • 加载ContentManagement模块以获取相关内容,您可能希望将该信息作为索引页模型的一部分
  • 加载产品模块以获取相关产品,再次将其放入您的模型中
  • 将包含用于呈现页面的信息的模型传递到视图中
  • 在您的视图中,呈现包含ContentManagem中两个内容的模型