我正在努力实现基于ROLE的管理应用程序。我有一个自定义选民,在某些时候我做的事情是:
if($role && VoterInterface::ACCESS_GRANTED !== $voteResult) {
throw new AccessDeniedException('Unauthorized access!');
}
,结果是呈现了自定义的error403.html.twig模板。 到现在为止还挺好。
error403模板扩展了主模板,在某些时候我使用app.request.get('_route')
构建一个菜单来生成链接。
问题是app.request.get('_route')
是null
。
x调试此问题我注意到$request->attributes->parameters
数组不会包含_route
或_route_params
个键。
有什么想法吗?
答案 0 :(得分:0)
问题是Symfony使用子请求来呈现错误页面。它不需要路由器,并且您没有像主请求中那样完全相同的请求对象。
Github问题
https://github.com/symfony/symfony/issues/5804
关于SO的同样问题
app.request.attributes.get('_route') is empty when I override 404 error page
一些理论
https://knpuniversity.com/screencast/symfony-journey/sub-request-internals
您可以编写自己的异常侦听器并以某种方式修改此行为。