404页面上不能使用安全组件?

Bri*_*ian 3 symfony

我希望我的自定义错误页面使用我的主应用程序基础模板.通过基本模板用于KnpMenu构建菜单.部分meny仅为特权用户呈现,并且这样做我注入安全组件并执行如下检查:

if ($security->isGranted('ROLE_COURSES')) {

但是,当存在404时,在防火墙组件运行之前执行的路由组件中抛出异常.

我不完全确定实际注入到菜单构建器中的是什么,因为安全组件尚未运行,但是无论如何,当我尝试在生产中转到不存在的页面时,当if语句是执行.

这里推荐的方法是什么?如果我不得不放弃渲染我的404的菜单,我想这没关系,但我希望我仍然能够以完整的形式呈现菜单.

lop*_*ded 5

我知道这是一个老问题,但我自己面对这个问题,我通过创建一个匹配所有东西的额外路线来修复它,并且是我的路线最后匹配的东西:

pageNotFound:
    pattern:  /{path}
    defaults: { _controller: MyContentBundle:PageNotFound:pageNotFound, path: '' }
    requirements:
        path: .*
Run Code Online (Sandbox Code Playgroud)

行动很简单:

public function pageNotFoundAction()
{
    throw new NotFoundHttpException();
}
Run Code Online (Sandbox Code Playgroud)

由于您从控制器中抛出NotFound异常,因此防火墙已经运行,您现在已经app.user进入自定义404错误页面.