Ответ 1
Окончательный ответ намного проще и не имеет отношения к FOS\RestBundle:
api:
resource: "@APIBundle/Controller/"
type: annotation
defaults: {_format: json} # <<<<<<<
prefix: /api/
Моя соответствующая конфигурация
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
Формат запроса