FOSRestBundle路由优先级

时间:2014-05-30 11:28:34

标签: symfony routing fosrestbundle

我正在使用FOSRestBundle。

如果我的redis服务器的密钥与请求的网址相同,我想匹配一些路由来控制。

我的问题是,我想在调用任何控制器或任何其他操作之前执行此操作,但FOSRestBundle首先捕获请求。

注意:如果url有一个或多个“/”,则会发生这种情况。如果没有,一切正常。

例如:

  

blabla.com/books/or-something-else< - 错误!

     

blabla.com/books-or-something-else< - 成功,工作正常!

我有一个听众:

public function onKernelRequest(GetResponseEvent $event)
{
    $request = $event->getRequest();

    if (HttpKernel::MASTER_REQUEST != $event->getRequestType()) {
        // dumping to see which controller makes the request
        var_dump($request->attributes->get('_controller')); die;
        return;
    }

    if ($request->attributes->has('_controller')) {
        // routing is already done
        return;
    }

    try {
        $route = $this->_match($request->getPathInfo());

        if($route == "" OR $route == false){
            throw new NotFoundHttpException("404");
        }
        else{
            $request->attributes->add($route);
        }

        unset($route["_route"],$route["_controller"]);
        $request->attributes->set("_route_params",$route);
    }
    catch(NotFoundHttpException $e){

    }
}

服务:

<service id="cs.routing" class="CS\CommonBundle\Utils\CSRouting">
    <argument type="service" id="security.context" />
    <argument>%redis%</argument>
    <tag name="kernel.event_listener" event="kernel.request" method="onKernelRequest" priority="1" />
</service>

0 个答案:

没有答案