Как указать формат по умолчанию для 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
endpoint я получаю исключение
Unable to find template "APIBundle:Jobs:post.html.twig".
PPS:
routing_loader:
default_format: json
не будет работать, потому что он используется только для автоматической генерации маршрутов.
3 ответов
окончательный ответ намного проще и не имеет отношения к 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
запрос-формате