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

Symfony3中JMSi18nRoutingBundle排除SonataMediaBundle路由失败求助

解决Symfony3中JMSi18nRoutingBundle无法排除SonataMediaBundle路由的问题

我之前在项目里也碰到过一模一样的情况,折腾了好一会儿才搞定,咱们一步步来解决:

首先,先纠正一个小问题:你用的方式二YAML格式是错误的,options: i18n: false不符合YAML语法规范,正确的写法应该是方式一的options: { i18n: false },或者换行缩进的形式:

media:
    resource: '@SonataMediaBundle/Resources/config/routing/media.xml'
    prefix: /media
    options:
        i18n: false

但光改这个可能还不够,因为JMSi18nRoutingBundle的全局配置可能会覆盖这个局部选项。你需要在JMS的配置里明确排除/media前缀的所有路由,确保它们不会被国际化:

打开app/config/config.yml,找到jms_i18n_routing的配置块,添加exclude_patterns规则:

jms_i18n_routing:
    default_locale: en # 替换成你的默认语言
    locales: [en, fr] # 替换成你的项目支持语言列表
    strategy: prefix_except_default # 或者你使用的其他路由策略
    exclude_patterns:
        - ^/media # 排除所有以/media开头的路由

接下来很关键的一步:清除Symfony缓存,因为旧的路由缓存还会生效,运行对应环境的命令:

# 开发环境
php bin/console cache:clear --env=dev

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

最后验证一下效果:运行路由调试命令,查看SonataMedia的路由是否已经没有语言前缀了:

php bin/console debug:router | grep media

你会看到类似media_view这样的路由,它的路径应该是/media/{id}/{format},而不是带/{locale}前缀的形式。这时候再生成媒体链接,就不会出现/en这类语言前缀了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:02:57