Как указать формат по умолчанию для FOS\RestBundle для 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

не будет работать, потому что он используется только для генерации автоматических маршрутов.

Ответ 1

Окончательный ответ намного проще и не имеет отношения к FOS\RestBundle:

api:
    resource: "@APIBundle/Controller/"
    type:     annotation
    defaults: {_format: json} # <<<<<<<
    prefix:   /api/

Ответ 2

Вы можете указать 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 для получения дополнительной информации.

Ответ 3

Я не смог проверить это решение самостоятельно, но, следуя документации, кажется, что вы можете использовать формат по умолчанию, указав правила на пути

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 Формат запроса