Моя соответствующая конфигурация
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
не будет работать, потому что он используется только для создания автоматических маршрутов.
Окончательный ответ намного проще и не имеет отношения к 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 для получения дополнительной информации.
Я не смог проверить это решение самостоятельно, но, следуя документации, кажется, что вы можете использовать формат по умолчанию, задавая правила по пути
config.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
формат запроса json