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
相关产品推荐
相关产品推荐

