如何按内容类型分隔 POST 个请求?

How can I separate POST requests by content-type?

我想根据客户端提供的内容类型执行不同的操作。我为此配置了 2 个控制器操作:

/**
 * @Post("", requirements={"_format": "json"})
 */
public function postJsonAction(Request $request)
{
    // 
}

/**
 * @Post("", requirements={"_format": "csv"})
 */
public function postCsvAction(Request $request)
{
    //
}

但是,这对我不起作用,总是执行第一个操作。我在这里做错了什么? 这是我在 config.yml:

中的 fos_rest 配置
fos_rest:
    param_fetcher_listener: true
    allowed_methods_listener: true
    routing_loader:
        default_format: json
        include_format: false
    view:
        mime_types: { 'csv': ['text/csv'], 'xlsx': ['application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] }
        formats:
            json: true
            csv: true
            xlsx: true
    format_listener:
        rules:
            - { path: '^/api', priorities: ['json', 'csv', 'xlsx'], fallback_format: ~, exception_fallback_format: json, prefer_extension: false }
    service:
        view_handler: app.view_handler

您可以在您的路线中配置它。例如,如果您使用的是 yml 路由配置。

csv:
    path:      /article/format/csv/
    defaults:  { _controller: AppBundle:Article:postCsv }

json:
    path:      /article/format/json/
    defaults:  { _controller: AppBundle:Article:postJson }

然后,使用 JS 更改表单操作。

if ("csv" === $("#format").val()) {
   $('#your_form').attr('action', '/article/format/csv/');
}
else {
   $('#your_form').attr('action', '/article/format/json/');
}