Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2105685
  • 博文数量: 194
  • 博客积分: 6450
  • 博客等级: 准将
  • 技术积分: 2085
  • 用 户 组: 普通用户
  • 注册时间: 2005-06-06 13:39
文章分类

全部博文(194)

文章存档

2013年(38)

2012年(11)

2011年(1)

2010年(1)

2009年(4)

2008年(13)

2007年(18)

2006年(63)

2005年(45)

我的朋友

分类: 系统运维

2007-07-19 16:07:24

分配是一个从中 Zend_Controller_Request_Abstract 提取module名, controller名, action名,和其中包含的可选的参数, 然后实例化一个控制器并调用控制器中的action的一个过程.如果module, controller, action中的任何一个没有找到, 将使用它们的默认值.

Zend_Controller_Dispatcher_Standard 指定了`index` 作为controller, action 的默认值, 用 `default` 作为module的默认值.尽管如此,还是允许开发者通过setDefaultController(), setDefaultAction(), and setDefaultModule() 等分配器方法来相应的改变默认值.

分配发生在前端控制器的一个循环中.在分配发生之前, 前端控制器通过 路由来找到 用户指定的module, controller, action 的值和可选的参数.然后就进入一个分配请求的循环.

在每一个遍历开始时, 它(Dispatcher)在请求对象中设置一个当前 action 已经分配的标志.如果一个 action 或者 pre/postDispatch 插件重置了这个标志, 分配循环将继续,并试图 分配一个新的请求.通过改变请求中的controller 和/或者 action 和重置分配标志, 开发者可能定义一个可以执行的请求链.

是行为控制器中的 _forward 方法控制了这样的分配; 通过在 任何 pre/postDispatch(), 或者action 方法中提供 一个 action, controller, module 和可选的附加参数, 你就可以 请求一个新的action.

示例代码:

public function fooAction()
{
    // forward to another action in the current controller and module:
    $this->_forward('bar', null, null, array('baz' => 'bogus'));
}

public function barAction()
{
    // forward to an action in another controller, FooController::bazAction(),
    // in the current module:
    $this->_forward('baz', 'foo', null, array('baz' => 'bogus'));
}

public function bazAction()
{
    // forward to an action in another controller in another module,
    // Foo_BarController::bazAction():
    $this->_forward('baz', 'bar', 'foo', array('baz' => 'bogus'));
}
?>

 

总结:Dispatcher 是 ZF 实现 MVC的重要组成部分, 理解Dipatcher的功能对我们更好的应用 ZF或其它框架有很重要的意义。可以认为分配的作用就类似于, 在路由之后执行相应行为的一个过程,然后 返回response 对象.

上面是对 手册中的大致翻译,以作为学习笔记摘要.


阅读(1330) | 评论(1) | 转发(0) |
0

上一篇:ZF 1.0 Action Helper 之 ViewRenderer

下一篇:离开

给主人留下些什么吧!~~