Symfony升级后Sonata Admin路由名称修改及缺失报错解决
解决Symfony升级后Sonata后台路由不存在问题
问题分析
升级Symfony到5.4版本后,Sonata Media Bundle的路由命名前缀从sonata变为app,导致模板中引用的旧路由admin_sonata_media_media_create无法匹配实际存在的admin_app_media_media_create。
解决步骤
1. 检查Sonata Media Bundle配置
打开config/packages/sonata_media.yaml(升级前可能在app/config/config.yml),确认admin服务的命名配置:
sonata_media: admin: media: service: sonata.media.admin.media # 检查是否有prefix或service命名相关配置,确认当前路由前缀为app
2. 全局搜索并替换旧路由名
在项目根目录执行全局搜索(根据系统选择命令):
- Linux/macOS:
grep -r "admin_sonata_media_media_create" ./ - Windows(PowerShell):
Get-ChildItem -Recurse | Select-String "admin_sonata_media_media_create"
找到所有包含该路由的文件,重点替换以下场景:
- Twig模板:将
path('admin_sonata_media_media_create')或url('admin_sonata_media_media_create')改为path('admin_app_media_media_create') - PHP Admin类:检查
configureActionButtons等自定义按钮方法中的硬编码路由引用,替换为新路由名
3. 检查Sonata Admin路由配置
查看config/routes/sonata_admin.yaml,确认路由注册是否正确关联到你的MediaAdmin服务:
admin: resource: '@SonataAdminBundle/Resources/config/routing/sonata_admin.xml' prefix: /admin _sonata_admin: resource: . type: sonata_admin prefix: /admin
确保App\Admin\MediaAdmin类已正确注册,路由命名前缀为app。
4. 清除缓存
执行缓存清除命令,确保路由缓存更新:
# 开发环境 php bin/console cache:clear # 生产环境 php bin/console cache:clear --env=prod
5. 额外排查点
- 检查自定义Sonata模板:查看
templates/bundles/SonataMediaBundle或src/Resources/views/Admin下的模板文件,是否有遗留的旧路由引用 - 确认Sonata包版本:查看
composer.json中sonata-project/media-bundle的版本,升级后可能存在路由命名规则变更,需对应调整
内容的提问来源于stack exchange,提问作者Aleksey Lapaev
相关产品推荐
相关产品推荐

