我没有看到任何理由通过内核转发请求.您可以按照建议的方式将验证服务中封装此逻辑的路由,或者您可以创建一个在路由器侦听器之后运行的kernel.request侦听器,并且仅在满足条件的情况下才应用_controller属性.
例如,这个routing.yml:
some_route:
pattern: /xyz
defaults: { _controller_candidate: "FooBundle:Bar:baz" }
而这个听众:
class MyListener
{
public function onKernelRequest($event)
{
$request = $event->getRequest();
if (!$controller = $request->attributes->get('_controller_candidiate')) {
return;
}
if (/* your logic... */) {
$request->attributes->set('_controller', $controller');
}
}
}
配置运行后核心路由器侦听器:
services:
my_listener:
class: MyListener
tags:
-
name: kernel.event_listener
event: kernel.request
priority: -10
Symfony 2.0中的核心路由器侦听器的优先级为0,Symfony 2.1中的优先级为32.在这两种情况下,-10的优先级都应该起作用.
我很好奇,看看这是否有效?