FOSRestBundle ParamFetcher POST 方法
FOSRestBundle ParamFetcher POST method
我正在使用 FOSRestBundle 创建 restful API。
当我使用 GET 方法通过 ajax 发送数据时,一切正常。
但我必须通过 POST 发送数据,我尝试使用 ParamFetcherListener 从 POST 获取值,但它是 returns 空值。
当我将请求方法更改为 GET 时,它起作用了。
我做错了什么?
我的代码:
/**
* @Rest\View(statusCode=201)
* @QueryParam(name="test", description="test")
*/
public function createAction(Request $request, ParamFetcherInterface $paramFetcher)
{
$test = $paramFetcher->get('test'); // it's null
}
和config.yml:
fos_rest:
param_fetcher_listener: true
body_listener:
decoders:
json: fos_rest.decoder.json
view:
view_response_listener: true
formats:
xml: true
json: true
routing_loader:
default_format: json
format_listener:
rules:
- { path: '^/api/', priorities: ['json', 'xml'], fallback_format: 'html', prefer_extension: false }
路由:
_wdt ANY ANY ANY /_wdt/{token}
_profiler_home ANY ANY ANY /_profiler/
_profiler_search ANY ANY ANY /_profiler/search
_profiler_search_bar ANY ANY ANY /_profiler/search_bar
_profiler_info ANY ANY ANY /_profiler/info/{about}
_profiler_phpinfo ANY ANY ANY /_profiler/phpinfo
_profiler_search_results ANY ANY ANY /_profiler/{token}/search/results
_profiler ANY ANY ANY /_profiler/{token}
_profiler_router ANY ANY ANY /_profiler/{token}/router
_profiler_exception ANY ANY ANY /_profiler/{token}/exception
_profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css
_twig_error_test ANY ANY ANY /_error/{code}.{_format}
object_all GET ANY ANY /api/objects
saved_object_all GET ANY ANY /api/saved_objects
saved_object_get GET ANY ANY /api/saved_objects/{id}
saved_object_new POST ANY ANY /api/saved_objects
saved_object_delete DELETE ANY ANY /api/saved_objects/{id}
object_test ANY ANY ANY /api/test
提前致谢。
我的错误,当然 POST 请求中的数据是在 body 中发送的,设置了 body 侦听器解码器,所以这是正确的解决方案:
/**
* @Rest\View(statusCode=201)
*/
public function newAction(Request $request)
{
$test = $request->request->get('test');
...
}
已接受的解决方案恢复为使用标准请求对象。
如果你想在 post 请求中使用 ParamFetcher,你需要使用
@RequestParam
而不是
@QueryParam
在您的方法的注释中。
/**
* @Rest\View(statusCode=201)
* @RequestParam(name="test", description="test")
*/
public function createAction(Request $request, ParamFetcherInterface $paramFetcher)
{
$test = $paramFetcher->get('test'); // it's null
}
我正在使用 FOSRestBundle 创建 restful API。 当我使用 GET 方法通过 ajax 发送数据时,一切正常。 但我必须通过 POST 发送数据,我尝试使用 ParamFetcherListener 从 POST 获取值,但它是 returns 空值。 当我将请求方法更改为 GET 时,它起作用了。 我做错了什么?
我的代码:
/**
* @Rest\View(statusCode=201)
* @QueryParam(name="test", description="test")
*/
public function createAction(Request $request, ParamFetcherInterface $paramFetcher)
{
$test = $paramFetcher->get('test'); // it's null
}
和config.yml:
fos_rest:
param_fetcher_listener: true
body_listener:
decoders:
json: fos_rest.decoder.json
view:
view_response_listener: true
formats:
xml: true
json: true
routing_loader:
default_format: json
format_listener:
rules:
- { path: '^/api/', priorities: ['json', 'xml'], fallback_format: 'html', prefer_extension: false }
路由:
_wdt ANY ANY ANY /_wdt/{token}
_profiler_home ANY ANY ANY /_profiler/
_profiler_search ANY ANY ANY /_profiler/search
_profiler_search_bar ANY ANY ANY /_profiler/search_bar
_profiler_info ANY ANY ANY /_profiler/info/{about}
_profiler_phpinfo ANY ANY ANY /_profiler/phpinfo
_profiler_search_results ANY ANY ANY /_profiler/{token}/search/results
_profiler ANY ANY ANY /_profiler/{token}
_profiler_router ANY ANY ANY /_profiler/{token}/router
_profiler_exception ANY ANY ANY /_profiler/{token}/exception
_profiler_exception_css ANY ANY ANY /_profiler/{token}/exception.css
_twig_error_test ANY ANY ANY /_error/{code}.{_format}
object_all GET ANY ANY /api/objects
saved_object_all GET ANY ANY /api/saved_objects
saved_object_get GET ANY ANY /api/saved_objects/{id}
saved_object_new POST ANY ANY /api/saved_objects
saved_object_delete DELETE ANY ANY /api/saved_objects/{id}
object_test ANY ANY ANY /api/test
提前致谢。
我的错误,当然 POST 请求中的数据是在 body 中发送的,设置了 body 侦听器解码器,所以这是正确的解决方案:
/**
* @Rest\View(statusCode=201)
*/
public function newAction(Request $request)
{
$test = $request->request->get('test');
...
}
已接受的解决方案恢复为使用标准请求对象。
如果你想在 post 请求中使用 ParamFetcher,你需要使用
@RequestParam
而不是
@QueryParam
在您的方法的注释中。
/**
* @Rest\View(statusCode=201)
* @RequestParam(name="test", description="test")
*/
public function createAction(Request $request, ParamFetcherInterface $paramFetcher)
{
$test = $paramFetcher->get('test'); // it's null
}