我正在使用ExceptionListener,对于某些控制器,我希望将错误格式化为json响应。我想我会在@Route
注释中定义一个选项,然后在ExceptionListener中使用它:
/**
* @Route("/route/path", name="route_name", options={"response_type": "json"})
*/
和
class ExceptionListener
{
public function onKernelException(GetResponseForExceptionEvent $event)
{
// ...
}
}
但GetResponseForExceptionEvent
不包含有关匹配路线的任何信息。有没有办法在ExceptionListener中获取options
数组?
感谢。
答案 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'];
}
}