(Yaf >=1.0.0)
Yaf_Plugin_Abstract::routerShutdown — 路由完成后的钩子
$request, Yaf_Response_Abstract $response): void该钩子在路由过程完成、控制器和动作名称已经解析之后触发,但在调度循环开始之前。由于目标控制器和动作已知,它通常用于访问控制检查,例如登录检查。
request正在被调度的 Yaf_Request_Abstract 实例。
response没有返回值。
示例 #1 Yaf_Plugin_Abstract::routerShutdown() 示例
<?php
class AuthPlugin extends Yaf_Plugin_Abstract
{
public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response)
{
/* 路由已经完成,目标控制器和动作已知:
* 检查用户是否有权限访问它们 */
$public = array("Index" => array("index"), "User" => array("login"));
$controller = $request->getControllerName();
$action = $request->getActionName();
if (isset($public[$controller]) && in_array($action, $public[$controller])) {
return;
}
if (!Yaf_Session::getInstance()->has("login")) {
$response->setRedirect("/user/login");
$request->setDispatched(true); // 不再调度该请求
}
}
}
/* 插件在引导类中注册 */
class Bootstrap extends Yaf_Bootstrap_Abstract
{
public function _initPlugin(Yaf_Dispatcher $dispatcher)
{
$dispatcher->registerPlugin(new AuthPlugin());
}
}
?>