FOSRestBundle 路由版本控制
FOSRestBundle routes versioning
我想为我的项目实现端点的版本控制。结果是 FOSRestBundle 实现不是很清楚所以我想像下面这样实现:
Symfony 5.4
FOSRestBundle 3
见下文annotation.yaml 文件:
v2_controllers:
resource: ../../src/Controller/V2/
type: annotation
prefix: /v2
name_prefix: 'api_v2_'
controllers:
resource: ../../src/Controller/
type: annotation
name_prefix: 'api_'
kernel:
resource: ../../src/Kernel.php
type: annotation
当我运行这个命令时php bin/console debug:router --show-controllers
我得到以下结果:
..
..
...
api_offer_list GET ANY ANY /offer-list/{productId}/{pageType}/ App\Controller\V2\OfferListV2Controller::offerListAction()
api_v2_offer_list GET ANY ANY /v2/offer-list/{productId}/{pageType}/ App\Controller\V2\OfferListV2Controller::offerListAction()
...
..
您可以看到,由于某些奇怪的原因,新版本也覆盖了旧端点
最后这是我的 fos_rest.yaml 配置:
# Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html
fos_rest:
param_fetcher_listener: true
在控制器目录中,您需要创建两个单独的目录,一个用于 v1,另一个用于 v2,这应该可以解决问题。
Controller/
v1/
v2/
我想为我的项目实现端点的版本控制。结果是 FOSRestBundle 实现不是很清楚所以我想像下面这样实现:
Symfony 5.4
FOSRestBundle 3
见下文annotation.yaml 文件:
v2_controllers:
resource: ../../src/Controller/V2/
type: annotation
prefix: /v2
name_prefix: 'api_v2_'
controllers:
resource: ../../src/Controller/
type: annotation
name_prefix: 'api_'
kernel:
resource: ../../src/Kernel.php
type: annotation
当我运行这个命令时php bin/console debug:router --show-controllers
我得到以下结果:
..
..
...
api_offer_list GET ANY ANY /offer-list/{productId}/{pageType}/ App\Controller\V2\OfferListV2Controller::offerListAction()
api_v2_offer_list GET ANY ANY /v2/offer-list/{productId}/{pageType}/ App\Controller\V2\OfferListV2Controller::offerListAction()
...
..
您可以看到,由于某些奇怪的原因,新版本也覆盖了旧端点
最后这是我的 fos_rest.yaml 配置:
# Read the documentation: https://symfony.com/doc/master/bundles/FOSRestBundle/index.html
fos_rest:
param_fetcher_listener: true
在控制器目录中,您需要创建两个单独的目录,一个用于 v1,另一个用于 v2,这应该可以解决问题。
Controller/
v1/
v2/