【问题标题】:Routing for mutliple REST controllers using FOSRestBundle w/ Symfony 3.4使用带有 Symfony 3.4 的 FOSRestBundle 路由多个 REST 控制器
【发布时间】:2018-05-30 10:30:40
【问题描述】:

我正在尝试使用 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 路由/控制器似乎完全消失了,只剩下 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

在无需重写整个路由/控制器的情况下进行这项工作的任何提示?现有文档似乎并不完全准确,记录的字段不起作用。

【问题讨论】:

    标签: rest symfony routing fosrestbundle symfony-3.4


    【解决方案1】:

    可能生成的 V2 路由替换了 V1 路由,因为它们具有相同的生成名称。事实上,正如您所知,FOSRest 可以生成 REST 路由。

    【讨论】:

    • 确实是这样!对于其他为此苦苦挣扎的人,解决方案是简单地将@NamePrefix("v1")@NamePrefix("v2") 添加到每个控制器,以确保生成的路由具有不同的名称。谢谢!
    猜你喜欢
    • 2017-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2020-04-08
    • 2018-08-15
    • 1970-01-01
    相关资源
    最近更新 更多