You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Sonata 4.13+Symfony5.4自定义404错误页面异常排查

Sonata Admin 4.13 + Symfony 5.4 自定义404页面侧边栏空、不显示用户名的修复方案

问题根源

Symfony的错误页面(包括/_error/404)是在独立请求上下文里渲染的,默认不会加载Sonata Admin的核心服务(比如AdminPool),也不会自动初始化侧边栏菜单所需的Admin上下文。另外,错误页面默认可能没正确获取已登录用户的安全令牌,导致用户名显示不出来。

修复步骤

1. 修改404模板,手动加载侧边栏和用户信息

更新/templates/bundles/TwigBundle/Exception/error404.html.twig内容:

{% extends '@SonataAdmin/standard_layout.html.twig' %}

{% block title %}404 - 页面不存在{% endblock %}

{% block content %}
    <div class="alert alert-danger">
        <h1>404 页面未找到</h1>
        <p>您访问的页面不存在或已被移除</p>
    </div>
{% endblock %}

{% block side_bar %}
    {% if app.user %}
        {# 手动调用Sonata侧边栏渲染函数,传入AdminPool服务 #}
        {{ sonata_admin_side_bar(sonata_admin.adminpool) }}
    {% else %}
        <div class="sonata-sidebar">
            <p>请登录以访问完整管理功能</p>
        </div>
    {% endif %}
{% endblock %}

{% block user_block %}
    {% if app.user %}
        <div class="sonata-user-block">
            <span>欢迎, {{ app.user.username }}</span>
            <a href="{{ path('sonata_admin_security_logout') }}" class="btn btn-sm btn-default">退出</a>
        </div>
    {% endif %}
{% endblock %}

2. 配置Sonata Admin使用自定义错误模板

在config/packages/sonata_admin.yaml里添加错误模板配置:

sonata_admin:
    # 保留原有配置...
    templates:
        error: '@Twig/Exception/error404.html.twig'

3. 确保错误页面能获取用户会话

在config/packages/security.yaml中,允许_error路由通过防火墙,保留用户会话:

security:
    # 保留原有配置...
    access_control:
        # 允许错误页面匿名访问,同时保留已登录用户的会话
        - { path: ^/_error, roles: IS_AUTHENTICATED_ANONYMOUSLY }
        # 其他原有访问控制规则...

4. 清除缓存(必做)

执行缓存清除命令,让配置和模板生效:

# 开发环境
php bin/console cache:clear

# 生产环境
php bin/console cache:clear --env=prod

补充说明

  • 访问/_error/404时,Symfony是模拟错误场景,侧边栏的菜单可能和正常Admin页面一致,但如果某些Admin服务依赖特定请求参数,可能会有细微差异。
  • 如果app.user仍无法获取,可尝试直接从安全令牌获取:
{% if app.security.token_storage.token is not null and app.security.token_storage.token.user is not null %}
    <span>欢迎, {{ app.security.token_storage.token.user.username }}</span>
{% endif %}

内容的提问来源于stack exchange,提问作者Loraga

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 12:35:18