PUT请求数据在Symfony2中

时间:2014-08-20 12:49:06

标签: rest symfony put

最近几天我试图用Symfony2构建一个restful api(确切地说是2.5)。我根据大多数api遵循的最佳实践来构建此api。因此,我使用PUT http方法来更新资源。然而,使用PUT方法我遇到了问题。 Symfony检测到我使用PUT方法发送数据,但发送的变量I无处可寻。以下是一些代码段。

javascript / jquery ajax调用

$.ajax({
    url: 'http://www.adomain.com/app_dev.php/api/account/1',
    type: 'PUT',    
    data: 'name=Sander',
    dataType : 'json',
}); 

routes.php中的php路由

$collection->add('testbundle_api_update_account', new Route('/api/account/{id}',
array('_controller' => 'TestBundle:Account:apiUpdateAccount'),
array(), array(), '', array(), array('PUT')));

AccountController中的函数

public function apiUpdateAccountAction($id) {
    $request = Request::createFromGlobals();
    var_dump($request->getRealMethod());
    var_dump($request->request->get('name'));
    var_dump($request->query->get('name'));
    die;
}

此输出

string(3) "PUT"
NULL
NULL

一切都很好。找到路由,调用该函数。但是发送数据在哪里?有什么想法吗?

2 个答案:

答案 0 :(得分:1)

差异是

var_dump($this->request->getRealMethod());
var_dump($request->request->get('name'));
var_dump($request->query->get('name'));

首次使用

$this->request-> ...

因为不工作而使用

$request->request-> ...

尝试使用$ this-> request-> ...

答案 1 :(得分:0)

John Smith解决了这个问题。这可能与php PUT数据只能用;

获得一次这一事实有关
parse_str(file_get_contents('php://input', false , null, -1 , $_SERVER['CONTENT_LENGTH'] ), $_PUT):

在Symfony中,这可能是在调用控制器中的函数之前完成的。因此,以下对PUT不起作用:

$request = Request::createFromGlobals();

以下作品:

$request = $this->getRequest();