最近几天我试图用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
一切都很好。找到路由,调用该函数。但是发送数据在哪里?有什么想法吗?
答案 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();