11.4. The Yaf_Dispatcher class
简介
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 );
}
_instance
Yaf_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对象.
注意 如果此属性为TRUE, 那么将忽略Yaf_Dispatcher::$_return_response _default_module
默认的模块名, 在路由的时候, 如果没有指明模块, 则会使用这个值, 也可以通过配置文件中的ap.dispatcher.defaultModule来指定
_default_controller
默认的控制器名, 在路由的时候, 如果没有指明控制器, 则会使用这个值, 也可以通过配置文件中的ap.dispatcher.defaultController来指定
_default_action
默认的动作名, 在路由的时候, 如果没有指明动作, 则会使用这个值, 也可以通过配置文件中的ap.dispatcher.defaultAction来指定