Symfony3.4中使用FOSRestBundle配置多版本REST路由问题
解决Symfony 3.4 + FOSRestBundle多版本路由覆盖问题
你遇到的问题本质是路由名称冲突:FOSRestBundle会根据控制器里的方法名自动生成路由名称,当V1和V2控制器的方法完全一致时,后加载的V2路由会覆盖掉先加载的V1路由,导致V1的路由消失。
不用重写控制器或路由结构的话,最简单的解决办法是给每个版本的路由配置添加name_prefix参数,让生成的路由名称带上版本前缀,避免冲突。
修改你的routing.yml配置如下:
fooV1: type: rest resource: AppBundle\Controller\V1\FooController prefix: /api/v1 name_prefix: v1_ # 添加这个前缀,让V1的路由名称都以v1_开头 fooV2: type: rest resource: AppBundle\Controller\V2\FooController prefix: /api/v2 name_prefix: v2_ # 同理,V2的路由名称以v2_开头
配置完成后,重新运行bin/console debug:router,你就能看到V1和V2的路由都正常显示了——它们的路由名称会变成v1_foo_list、v2_foo_list这类带版本前缀的形式,不会再互相覆盖。
另外补充一点:如果你的控制器里有用到@Route注解手动指定路由名称,也要确保不同版本的路由名称不重复,不过既然你用的是FOSRestBundle的rest类型自动生成路由,上面的name_prefix方法就足够解决问题了。
内容的提问来源于stack exchange,提问作者jeanreis
相关产品推荐
相关产品推荐

