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