Yaf_Dispatcher实现了MVC中的C分发, 它由Yaf_Application负责初始化, 然后由Yaf_Application::run启动, 它协调路由来的请求, 并分发和执行发现的动作, 并收集动作产生的响应, 输出响应给请求者, 并在整个过程完成以后返回响应.
在PHP5.3之后, 打开yaf.use_namespace的情况下, 也可以使用 Yaf\Dispatcher.
final Yaf_Dispatcher {protected static Yaf_Dispatcher_instance;protected Yaf_Router_Interface_router;protected Yaf_View_Abstract_view;protected Yaf_Request_Abstract_request;protected array_plugins;protected boolean_render;protected boolean_return_response= FALSE ;protected boolean_instantly_flush= FALSE ;protected string_default_module;protected string_default_controller;protected string_default_action;public static Yaf_Dispatcher getInstance ( void );public Yaf_Dispatcher disableView ( void );public Yaf_Dispatcher enableView ( void );public boolean autoRender ( bool $flag );public Yaf_Dispatcher returnResponse ( boolean $flag );public Yaf_Dispatcher flushInstantly ( boolean $flag );public Yaf_Dispatcher setErrorHandler ( mixed $callback ,
int $error_type = E_ALL | E_STRICT );public Yaf_Application getApplication ( void );public Yaf_Request_Abstract getRequest ( void );public Yaf_Router_Interface getRouter ( void );public Yaf_Dispatcher registerPlugin ( Yaf_Plugin_Abstract $plugin );public Boolean setAppDirectory ( string $directory );public Yaf_Dispatcher setRequest ( Yaf_Request_Abstract $request );public Yaf_View_Interface initView ( void );public Yaf_Dispatcher setView ( Yaf_View_Interface $view );public Yaf_Dispatcher setDefaultModule ( string $default_module_name );public Yaf_Dispatcher setDefaultController ( string $default_controller_name );public Yaf_Dispatcher setDefaultAction ( string $default_action_name );public Yaf_Dispatcher throwException ( boolean $switch = FALSE );public Yaf_Dispatcher catchException ( boolean $switch = FALSE );public Yaf_Response_Abstract dispatch ( Yaf_Request_Abstract $request );
}
_instanceYaf_Dispatcher实现了单利模式, 此属性保存当前实例
_request当前的请求
_router路由器, 在Yaf0.1之前, 路由器是可更改的, 但是Yaf0.2以后, 随着路由器和路由协议的分离, 各种路由都可以通过配置路由协议来实现, 也就取消了自定义路由器的功能
_view当前的视图引擎, 可以通过Yaf_Dispatcher::setView来替换视图引擎为自定义视图引擎(比如Smary/Firekylin等常见引擎)
_plugins已经注册的插件, 插件一经注册, 就不能更改和删除
_render标示着,是否在动作执行完成后, 调用视图引擎的render方法, 产生响应. 可以通过Yaf_Dispatcher::disableView和Yaf_Dispatcher::enableView来切换开关状态
_return_response标示着,是否在产生响应以后, 不自动输出给客户端, 而是返回给调用者. 可以通过Yaf_Dispatcher::returnResponse来切换开关状态
_instantly_flush标示着, 是否在有输出的时候, 直接响应给客户端, 不写入Yaf_Response_Abstract对象.
| ![[注意]](images/note.gif) | 注意 | 
|---|---|
| 如果此属性为TRUE, 那么将忽略Yaf_Dispatcher::$_return_response | 
_default_module默认的模块名, 在路由的时候, 如果没有指明模块, 则会使用这个值, 也可以通过配置文件中的ap.dispatcher.defaultModule来指定
_default_controller默认的控制器名, 在路由的时候, 如果没有指明控制器, 则会使用这个值, 也可以通过配置文件中的ap.dispatcher.defaultController来指定
_default_action默认的动作名, 在路由的时候, 如果没有指明动作, 则会使用这个值, 也可以通过配置文件中的ap.dispatcher.defaultAction来指定