【问题标题】:Slim Framework middleware that selects a route选择路由的 Slim 框架中间件
【发布时间】:2015-03-17 14:15:10
【问题描述】:

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

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

【问题讨论】:

  • 我原以为此时已经选择了路由。你可以做一个重定向,还是你特别想做一个内部转发? (用过Slim,不知道能不能用)。
  • 我无法重定向,因为我不在回调中 (stackoverflow.com/questions/19654370/…)。 Route 似乎是在最后一个中间件调用(Slim 本身)上选择的,我想强制选择路由
  • This example 似乎正在调度自定义路线 - 值得一看吗?
  • 我找到了另一个解决方案,但我不得不更改 \Slim\Router 属性的可见性

标签: php middleware slim


【解决方案1】:

这似乎是一个有效的技巧:

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

【讨论】:

    猜你喜欢
    • 2015-02-14
    • 2017-10-13
    • 2013-04-06
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2018-03-08
    相关资源
    最近更新 更多