我正在学习Zend Framework,它使用的是MVC模型.
我仍然没有理解MVC 模型,视图,控制器是什么.
三个不同的领域是什么,程序流程是什么样的?
M - 模型 - 往往是混乱的最大来源.这些是应用程序中执行所有"繁重工作"的部分 - 它们处理数据库访问,执行复杂的特定于应用程序的逻辑,并负责应用程序的"大部分"工作.与视图和控制器不同,Zend Framework没有模型的基类 - 这是因为它们的作用没有真正的一致性.一些框架(如Ruby on Rails)尝试将某种数据库包装器作为Model的基础,但是有很多情况(第三方提要/ API,静态文件,非持久性计算,跨多个表的概念). .)这至多是一种误导性做法.模型是应用程序的一部分,您仍然需要编程并且框架可以'
V - 视图 - 是这里最简单的组件.它们应该是简单的PHP/HTML模板.它们被赋予视图对象,数组,字符串等,然后将它们放入页面中.这里应该没有太多(如果有的话)复杂逻辑 - 循环遍历这些,显示这个(如果已定义),斑马条纹这个表和诸如此类的东西.View Helpers会发生一些神奇的事情(例如魔法渲染的助手Zend_Form
),但这对理解整个系统并不重要.
C - 控制器 - 从最广泛的意义上讲,控制器负责接收用户请求,将它们发送到Model对象并准备将模型传递给Views.它是将所有东西组合在一起的粘合剂.如果您正在使用Zend MVC,那么您需要关注2个控制器 - Zend_Controller_Front
和Zend_Controller_Action
.
Zend_Controller_Front
(如果您使用的话,"免费获得" Zend_Layout::startMVC()
)是您的应用程序的单一入口点 - 它处理原始用户请求并将URL转换为要调用的Action.有许多地方可以"插入"来处理身份验证和访问限制之类的事情,但是,核心只是指向传入请求的前门的"交通警察".
Zend_Controller_Action
是动作的基类 - 本质上,Action代表您的应用程序所做的事情(登录,列出博客条目,启动ICBM,订购比萨饼......),但并不直接负责实际操作.动作控制器非常无聊 - 它们从表单和URL中提取值,在Model类上调用几个方法来实际执行操作并将结果推送到视图中.如前所述,它们是将模型和视图结合在一起的"粘合剂".
一个粗略的测试,看看你是否沿着正确的方向分割东西是为了设想对你的网站进行重大改变.视觉重新设计几乎完全在视图中处理.移动所有网址会更改您的控制器.从Web应用程序转换为GUI应用程序将替换视图和控制器,但您的模型仍将基本保持不变.如果您重写模型,则会有一个全新的应用程序.