我正在使用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>