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

Symfony中FOSJsRouting生成带Locale前缀路由的问题求助

问题排查与解决办法

1. 校验JMS国际化路由配置

打开config/packages/jms_i18n_routing.yaml,确认custom策略的配置没有强制给路由名添加locale前缀:

jms_i18n_routing:
    default_locale: en
    locales: [en, tr]
    strategy: custom
    # 确保以下配置未开启(开启会自动给非默认locale的路由加前缀)
    # prefix_except_default: true

如果你的custom策略是通过自定义加载器实现的,检查加载器代码,确保没有在路由名前拼接{locale}__RG__这类标识。

2. 配置FOS JS路由与JMS兼容

修改config/packages/fos_js_routing.yaml,添加JMS路由的序列化策略,保证dump时能识别并输出不带locale前缀的路由名:

fos_js_routing:
    routes_to_expose: ['*'] # 按需指定要暴露的路由,用*表示全部
    serializer: jms_i18n_routing.serializer.route_exclusion_strategy

3. 修正路由定义

  • 对于不需要国际化的路由,不要使用@I18nRoute注解,直接用原生Symfony的@Route:
/**
 * @Route("/search", name="search")
 */
public function search()
{
    // ...
}
  • 如果需要国际化但不想路由名带前缀,在@I18nRoute中设置name_prefix: '':
/**
 * @I18nRoute("/search", name="search", name_prefix="")
 */
public function search()
{
    // ...
}

4. 清理缓存并重新生成JS路由

先清理Symfony缓存:

php bin/console cache:clear --env=dev
php bin/console cache:clear --env=prod

然后重新dump FOS路由文件:

php bin/console fos:js-routing:dump --target=public/static/js/fos_routing.js

5. 前端调用注意事项

如果上述配置生效,前端直接调用原路由名即可:

fos.Router.generate('search');

如果仍有问题,可在调用时显式指定locale参数:

fos.Router.generate('search', {}, { locale: 'en' });

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 09:51:22