Slim Framework中间件,用于选择路由

时间:2015-01-19 14:30:00

标签: php middleware slim

如何在自定义Slim中间件中选择路由? 我想强制一个特定的路线,但我不知道该怎么做:

class Acl extends \Slim\Middleware{
    public function call()
    {
        if($isnotlogged){
            //force to select "login" route
            ...
        }
        $this->next->call();
    }   
}

1 个答案:

答案 0 :(得分:2)

这似乎是一个工作黑客:

\ Slim \ Router $ matchedRoutes属性具有受保护的可见性,因此我必须创建一个自定义路由器来覆盖它:

class MyRouter extends \Slim\Router {

    public function setRoute(\Slim\Route $route){
        $this->matchedRoutes=[$route];
    }

}

当我初始化Slim时,我必须设置我的路由器:

$app = new \Slim\Slim();
$app->router=new MyRouter();

最后,我可以在中间件中强制选择路由:

class Acl extends \Slim\Middleware{
    public function call()
    {
        if($isnotlogged){
            $this->getApplication()->router()->setRoute($this->getApplication()->router->getNamedRoute("login"));
        }
        $this->next->call();
    }   
}