前端控制器概述
前端控制器最至少需要一个或多个包含动作控制器的目录的路径来完成工作。还有大量的方法可供调用,进一步裁剪前端控制器以及它的助手类环境。
主要方法前端控制器有很多建立其环境的访问器。但是,有三个是开启前端控制器功能的主要方法: getInstance()
$front = Zend_Controller_Front::getInstance();
setControllerDirectory() 和 addControllerDirectory()
例如:
// Set the default controller directory:
$front->setControllerDirectory('../application/controllers');
// Set several module directories at once:
$front->setControllerDirectory(array(
'default' => '../application/controllers',
'blog' => '../modules/blog/controllers',
'news' => '../modules/news/controllers',
));
// Add a 'foo' module directory:
$front->addControllerDirectory('../modules/foo/controllers', 'foo');
可以通过 addModuleDirectory() and getModuleDirectory()前端控制器的一个功能是你可以 定义一个模块目录结构 来创建独立的组件,被叫做“模块”。 每个模块位于自己的目录并和缺省模块的目录结构一样 - 例如,它至少 有个 "controllers" 字目录和 "views" 子目录以及其它应用子目录。
然后,如果你想确定特定模块或当前模块路径,调用 dispatch()
如果没有请求或者响应对象传入,
类似的, 分发过程有三个不同的事件:
路由只发生一次,当调用 run()
基本上,如果不要求定制前端控制器环境,
// Instantiate front controller, set controller directory, and dispatch in one
// easy step:
Zend_Controller_Front::run('../application/controllers');
环境访问器方法除了上面所列的方法以外,还有很多访问器方法可以影响前端控制器环境 —— 因而也影响前端控制器代理(delegate)的类的环境。
前端控制器参数介绍里曾提到前端控制器可以用作各种控制器组件的注册表。它通过一个"param"家族的方法来做到这些。这些方法允许通过前端控制器注册任意类型的数据 —— 对象和变量,可以在分发链中的任何时候获取。这些变量被传递到路由器,分发器,以及动作控制器。这些方法包括:
有几个预定义的参数可供设定,它们在分发链中有特别的用途:
继承前端控制器
要继承前端控制器,至少需要覆盖
class My_Controller_Front extends Zend_Controller_Front
{
public static function getInstance()
{
if (null === self::$_instance) {
self::$_instance = new self();
}
return self::$_instance;
}
}
覆盖 通常不需要继承前端控制器,除非你需要增加新的功能(比如,一个插件自动加载器,或者一个方法来指定动作助手路径)。你想要改动的地方可能包括修改控制器目录的存储方式,使用的默认路由器以及分发器。
|