Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 选择路由的Slim框架中间件_Php_Middleware_Slim - Fatal编程技术网

Php 选择路由的Slim框架中间件

Php 选择路由的Slim框架中间件,php,middleware,slim,Php,Middleware,Slim,如何在自定义Slim中间件中选择路由? 我想强制执行特定路线,但我不知道如何执行: class Acl extends \Slim\Middleware{ public function call() { if($isnotlogged){ //force to select "login" route ... } $this->next->call(); }

如何在自定义Slim中间件中选择路由? 我想强制执行特定路线,但我不知道如何执行:

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

这似乎是一个可行的方法:

\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();
    }   
}

我本以为现在已经选择了路线。你可以改为重定向,还是特别想做内部转发?(已使用Slim,但不知道是否可能)。可能相关:我无法重定向,因为我不在回调()中。在最后一次中间件调用(Slim本身)时,Route似乎是Selected(选择),我想强制选择该路由以发送自定义路由-值得一看吗?我找到了另一个解决方案,但我必须更改\Slim\Router属性的可见性