Zend_Controller
是Zend Framework的MVC体系的核心部份。MVC指Model-View-Controller,是一个用于分离应用逻辑和表现逻辑的设计模式。Zend_Controller_Front
实现了Front Controller设计模式,所有的请求都通过front controller(前端控制器)并分发(dispatch)到不同的控制器来处理,分发的过程基于请求的URL。 Zend_Controller
体系具有可扩展性,可以通过继承已有的类或者自己写个新的类来实现各种接口和抽象类,也可以编写插件或者助手类(helper)来增强系统的功能。http://framework.zend.com/roadmap/components
,其服务器路径为/roadmap/components
,则会映射到roadmap
控制器和components
Action。如果不存在action,则会调用index这个action。如果控制器不存在,则会自动调用index控制器。(按照Apache的命名惯例,自动映射到DirectoryIndex
文件)Zend_Controller
的工作流相当简单。请求被Zend_Controller_Front
接收,然后它调用Zend_Controller_Router_Rewrite
来决定哪个控制器(和控制器中的动作)被派遣。为了在请求中设置控制器和动作名字Zend_Controller_Router_Rewrite
分解URI。Zend_Controller_Front
接着进入一个派遣循环。它调用Zend_Controller_Dispatcher_Standard
,传递给它请求,派遣在请求(或使用缺省的)中指定的控制器和动作。在控制器完成之后,控制返回到Zend_Controller_Front
。如果控制器通过重置请求派遣状态指示其它的控制器应该被派遣,循环将继续并且其它派遣被执行。否则,处理结束。 默认的行为 |
---|
默认地,前端控制器加载ErrorHandler插件,以及ViewRenderer动作助手,分别为了简化控制器中的错误处理和视图渲染。
如需禁用 ErrorHandler ,调用dispatch() 前执行下面代码: // Disable the ErrorHandler plugin: $front->setParam('noErrorHandler', true); 如需禁用 ViewRenderer ,调用dispatch() 前执行下面代码: // Disable the ViewRenderer helper: $front->setParam('noViewRenderer', true); |
ViewRenderer
根据控制器的名称(例如index)和当前的action的名称(例如index)来决定使用哪个模板文件。默认情况下,模板文件使用.phtml作为扩展名。 也就是说,上例中,我们将使用index/index.phtml
模板文件。 另外,ViewRenderer
自动假设views
目录与控制器目录平级,作为视图层的基础目录,而实际的模板文件则放置在views/scripts/
子目录下。因为我们的模板文件应该是 application/views/scripts/index/index.phtml
。 'default' => '../application/controllers',
'blog' => '../modules/blog/controllers',
'news' => '../modules/news/controllers',
));
*/
$_POST['user']
可以调用请求对象的getPost('user')
访问,getQuery()
可以获取$_GET
元素,getHeader()
可以获取请求消息头。