Essential Zend Controller (2)

2. Zend Controller之Front
Zend Controller本身的处理流程较为简单直接. 下图来自HaoHappy的Zend文档中文译本中. 核心流程便如图所示.

zf_controller

但细节上却不尽如此.
首先Zend Framework采用了传统的Front Controller模式来对整个Request的处理进行了封装. 整个Front大致如下图所示.

zend_front

Zend_Ctonroller_Front中最重要的方法就是dispatch了, 可以看作是一个Application的整个执行中心. 在dispatch方法中, 第一个动作是调用Router来根据Url进行route, 第二个动作便是调用Dispatcher来根据route过来的Action (实质是Controller_Dispather_Token)来进行dispatch, 而这个过程将根据Action的具体信息来循环执行, 即如果所执行的Action返回的还是一个Controller_Dispatcher_Token, 即Action的话, dispatch便会继续执行下一个Action. 这样设计可以实现简单的Action Chain.
同时在route和dispath前后都会通知plugin(s), 以达到各种处理的目的, 比如执行时间的统计, log的记录等等. Zend_Ctonroller_Front中的_plugins属性是Plugin_Broker, 即Plugin代理, 用于真正装配Plugin及执行Plugin, 而Plugin_Broker本身自然也是一个Plugin.

另外要提到一下, 从Front的实现中可以看到一个特性, 即方法都返回自身. 如:
[code=php]Zend_Front::getInstance()
->setControllerDirectory($controllerDirectory)
->dispatch();[/code]

Martin Fowler称之为FluentInterface. 这样的写法有利有弊. 不作讨论.
zendframework

Related Posts

2 Responses to “Essential Zend Controller (2)”

Leave a Reply