Как указать формат по умолчанию для FOSRestBundle в json?
Моя соответствующая конфигурация
fos_rest:
view:
view_response_listener: force
sensio_framework_extra:
view:
annotations: false
И действительно раздражает указывать маршрут как
@Route("/jobs", defaults={ "_format" = "json" })
Каждый раз.
Так можно ли где-нибудь указать, что это предполагается по умолчанию?
PS:
Если я удалю defaults={ "_format" = "json" }
и вызову конечную точку /jobs
, я получу исключение
Unable to find template "APIBundle:Jobs:post.html.twig".
PPS:
routing_loader:
default_format: json
Не будет работать, потому что он используется только для автоматической генерации маршрутов.
3 answers
Окончательный ответ намного проще и не имеет отношения к FOS\restbundle:
api:
resource: "@APIBundle/Controller/"
type: annotation
defaults: {_format: json} # <<<<<<<
prefix: /api/
Вы можете указать default_format
, который загрузчик маршрутизации будет использовать для параметра _format
, если он не указан.
# app/config/config.yml
fos_rest:
routing_loader:
default_format: json
По умолчанию маршруты генерируются с помощью строки {_format}. Если вы хотите получить чистые URL-адреса (/jobs
вместо /jobs.{_format}
), то все, что вам нужно сделать, это добавить некоторую конфигурацию:
# app/config/config.yml
fos_rest:
routing_loader:
include_format: false
Ознакомьтесь с документацией FOSRestBundle для получения дополнительной информации.
Я не мог сам протестировать это решение, но, следуя документации, кажется, что вы можете использовать формат по умолчанию, указав правила для пути
конфигурация.yml
fos_rest:
format_listener:
rules:
# setting fallback_format to json means that instead of considering
# the next rule in case of a priority mismatch, json will be used
-
path: '^/'
host: 'api.%domain%'
priorities: ['json', 'xml']
fallback_format: json
prefer_extension: false
Таким образом, запрос, сделанный с помощью Accept-headers
, содержащий
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8,application/json
Приведет к формату запроса json