使用带有 Symfony 3.4 的 FOSRestBundle 路由多个 REST 控制器
Routing for mutliple REST controllers using FOSRestBundle w/ Symfony 3.4
我正在尝试使用 FOSRestBundle (2.3.1) 和 Symfony (3.4.11) 配置路由。以下按预期工作:
routing.yml:
fooV1:
type: rest
resource: AppBundle\Controller\V1\FooController
prefix: /api/v1
生产:
/bin/console debug:router
--------------------------------- -------- -------- ------ -------------------------------
Name Method Scheme Host Path
--------------------------------- -------- -------- ------ -------------------------------
get_foos GET ANY ANY /api/v1/foos.{_format}
get_foo GET ANY ANY /api/v1/foos/{bar}.{_format}
post_foos POST ANY ANY /api/v1/foos.{_format}
put_foos PUT ANY ANY /api/v1/foos/{bar}.{_format}
delete_foos DELETE ANY ANY /api/v1/foos/{bar}.{_format}
--------------------------------- -------- -------- ------ -------------------------------
到目前为止一切顺利。
现在我想添加一个 V2 API:
routing.yml:
fooV1:
type: rest
resource: AppBundle\Controller\V1\FooController
prefix: /api/v1
fooV2:
type: rest
resource: AppBundle\Controller\V2\FooController
prefix: /api/v2
问题是 V1 routes/controller 似乎完全消失了,只剩下 V2 (注意控制器具有相同的方法,只是响应格式发生了变化,因此有了新版本):
/bin/console debug:router
--------------------------------- -------- -------- ------ -------------------------------
Name Method Scheme Host Path
--------------------------------- -------- -------- ------ -------------------------------
get_foos GET ANY ANY /api/v2/foos.{_format}
get_foo GET ANY ANY /api/v2/foos/{bar}.{_format}
post_foos POST ANY ANY /api/v2/foos.{_format}
put_foos PUT ANY ANY /api/v2/foos/{bar}.{_format}
delete_foos DELETE ANY ANY /api/v2/foos/{bar}.{_format}
--------------------------------- -------- -------- ------ -------------------------------
我的 fos_rest
配置(在 config.yml
中):
fos_rest:
exception:
enabled: true
exception_controller: 'AppBundle\Controller\ExceptionController::showAction'
routing_loader:
default_format: json
view:
view_response_listener: force
formats:
rss: false
xml: false
json: true
jsonp: false
body_converter:
enabled: true
body_listener:
default_format: json
关于无需重写整个 routing/controllers 即可完成这项工作的任何提示?现有文档似乎并不完全准确,记录的字段不起作用。
可能生成的 V2 路由替换了 V1 路由,因为它们具有相同的生成名称。正如您所知,FOSRest 确实可以生成 REST 路由。
我正在尝试使用 FOSRestBundle (2.3.1) 和 Symfony (3.4.11) 配置路由。以下按预期工作:
routing.yml:
fooV1:
type: rest
resource: AppBundle\Controller\V1\FooController
prefix: /api/v1
生产:
/bin/console debug:router
--------------------------------- -------- -------- ------ -------------------------------
Name Method Scheme Host Path
--------------------------------- -------- -------- ------ -------------------------------
get_foos GET ANY ANY /api/v1/foos.{_format}
get_foo GET ANY ANY /api/v1/foos/{bar}.{_format}
post_foos POST ANY ANY /api/v1/foos.{_format}
put_foos PUT ANY ANY /api/v1/foos/{bar}.{_format}
delete_foos DELETE ANY ANY /api/v1/foos/{bar}.{_format}
--------------------------------- -------- -------- ------ -------------------------------
到目前为止一切顺利。 现在我想添加一个 V2 API:
routing.yml:
fooV1:
type: rest
resource: AppBundle\Controller\V1\FooController
prefix: /api/v1
fooV2:
type: rest
resource: AppBundle\Controller\V2\FooController
prefix: /api/v2
问题是 V1 routes/controller 似乎完全消失了,只剩下 V2 (注意控制器具有相同的方法,只是响应格式发生了变化,因此有了新版本):
/bin/console debug:router
--------------------------------- -------- -------- ------ -------------------------------
Name Method Scheme Host Path
--------------------------------- -------- -------- ------ -------------------------------
get_foos GET ANY ANY /api/v2/foos.{_format}
get_foo GET ANY ANY /api/v2/foos/{bar}.{_format}
post_foos POST ANY ANY /api/v2/foos.{_format}
put_foos PUT ANY ANY /api/v2/foos/{bar}.{_format}
delete_foos DELETE ANY ANY /api/v2/foos/{bar}.{_format}
--------------------------------- -------- -------- ------ -------------------------------
我的 fos_rest
配置(在 config.yml
中):
fos_rest:
exception:
enabled: true
exception_controller: 'AppBundle\Controller\ExceptionController::showAction'
routing_loader:
default_format: json
view:
view_response_listener: force
formats:
rss: false
xml: false
json: true
jsonp: false
body_converter:
enabled: true
body_listener:
default_format: json
关于无需重写整个 routing/controllers 即可完成这项工作的任何提示?现有文档似乎并不完全准确,记录的字段不起作用。
可能生成的 V2 路由替换了 V1 路由,因为它们具有相同的生成名称。正如您所知,FOSRest 确实可以生成 REST 路由。