Маршрутизация для нескольких контроллеров REST с использованием FOSRestBundle с 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}
--------------------------------- -------- -------- ------ -------------------------------

Все идет нормально. Теперь я хочу добавить API V2:

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_restconfig.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

Какие-нибудь советы по выполнению этой работы без необходимости переписывать всю маршрутизацию / контроллеры? Существующая документация не кажется полностью точной, с задокументированными полями, которые не работают.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
84
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Возможно, сгенерированные маршруты V2 заменят маршруты V1, потому что они имеют одинаковые сгенерированные имена. Действительно, FOSRest может генерировать маршруты REST, как вы уже знаете.

В самом деле, вот оно что! Для всех, кто боролся с этим, решением было просто добавить @NamePrefix("v1") и @NamePrefix("v2") к каждому контроллеру, просто чтобы убедиться, что сгенерированные маршруты имеют разные имена. Спасибо!

jeanreis 30.05.2018 12:49

Другие вопросы по теме