我正在使用Symfony 2.3,我有一个看起来像这样的方法:
public function addAction() {
$user = new User();
$form = $this->createForm(new UserType(), $user);
$form->handleRequest($this->getRequest());
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
try {
return $this
->render(
'SomeBundle:Default:adduser.html.twig',
array('id' => $user->getId()));
} catch (Exception $e) {
throw new HttpException(500, "Error persisting");
}
}
throw new HttpException(400, "Invalid request");
}
用这条路线:
some_bundle_adduserpage:
pattern: /user
defaults: { _controller: SomeBundle:User:add }
methods: [POST]
它工作得很好。我也有这种方法:
public function editAction($id) {
$response = new Response();
if (!$this->doesUserExist($id)) {
$response->setStatusCode(400);
return $response;
}
$user = new User();
$form = $this->createForm(new UserType(), $user);
$form->handleRequest($this->getRequest());
if (!$form->isValid()) {
$response->setStatusCode(400);
return $response;
}
$user->setId($id);
$em = $this->getDoctrine()->getManager();
try {
$em->persist($user);
$em->flush();
$response->setStatusCode(200);
} catch (Exception $e) {
$response->setStatusCode(500);
}
return $response;
}
用这条路线:
some_bundle_edituserpage:
pattern: /user/{id}
defaults: { _controller: SomeBundle:User:edit }
methods: [PUT]
requirements:
id: \d+
它不起作用。我可以制定一些请求并POST
就好了,但PUT
不起作用。具体来说,看起来我没有在$this->getRequest()
内获得任何参数。为什么$this->getRequest()
似乎适用于POST
,而不是PUT
?我做错了什么?
答案 0 :(得分:1)
这就是诀窍:
$form = $this
->createForm(new UserType(), $user, array('method' => 'PUT'));
method
位丢失了。显然,Symfony还不够酷,无法为您获取参数。创建表单时,您必须手动告诉它正在处理的请求类型。虽然这有效,但我不确定这是最好的答案。我非常愿意听别人。
答案 1 :(得分:0)
PUT
方法直接流式传输到stdin
,因此要访问它,您应使用php://input
和fopen
read
。
$put = fopen("php://input", "r");
免责声明在Symfony中可能有一个内置的方法,但我已经忘记了。