在ExceptionListener中获取路由选项

时间:2016-04-09 14:32:27

标签: php symfony

我正在使用ExceptionListener,对于某些控制器,我希望将错误格式化为json响应。我想我会在@Route注释中定义一个选项,然后在ExceptionListener中使用它:

/**
 * @Route("/route/path", name="route_name", options={"response_type": "json"})
 */

class ExceptionListener
{
    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        // ...
    }
}

GetResponseForExceptionEvent不包含有关匹配路线的任何信息。有没有办法在ExceptionListener中获取options数组?

感谢。

1 个答案:

答案 0 :(得分:1)

您应该能够使用

从属性请求中检索路径名称
$request = $event->getRequest();
$routeName = $request->attributes->get('_route');

然后,如果您将router服务注入您的班级,您可以使用

获取该路线的实例
$route = $this->router->getRouteCollection()->get($routeName);

最后

$options = $route->getOptions();
echo $options['response_type']
use Symfony\Component\Routing\RouterInterface;

class ExceptionListener
{
    private $router;

    public function __construct(RouterInterface $router)
    {
        $this->router = $router;
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $request = $event->getRequest();
        $route = $this->router->getRouteCollection()->get(
            $request->attributes->get('_route')
        );

        $options = $route->getOptions();
        // $options['response_type'];
    }
}