我想根据客户提供的内容类型执行不同的操作。我为此配置了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
答案 0 :(得分:1)
您可以在路线中进行配置。例如,如果您使用的是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/');
}