我不清楚如何使用Symfony表单组件和FOSRestBundle作为我用来创建资源的POST端点。使用FOSRestBundle中的Symofny表单处理POST请求
这里是我有我的POST控制器操作:
//GuestController.php
public function cpostAction(Request $request)
{
$data = json_decode($request->getContent(), true);
$entity = new Guest();
$form = $this->createForm(GuestType::class, $entity);
$form->submit($data);
if ($form->isValid()) {
$dm = $this->getDoctrine()->getManager();
$dm->persist($entity);
$dm->flush();
return new Response('', Response::HTTP_CREATED);
}
return $form;
}
我要做的就是:
- 发送
application/json
POST请求到端点(/guests
); - 创建绑定到实体的表单实例(
Guest
); - 由于我正在发送JSON,因此在将其提交到表单(
$form->submit($data)
)之前,我需要json_decode
请求主体。
我有以下问题:
- 我真的总是要
json_decode()
的Request
内容之前手动将其提交表单?这个过程可以用FosRestBundle自动完成吗? - 是否有可能
application/x-www-form-urlencoded
数据发送到控制器动作,并用它来处理:
-
$form->handleRequest($request)
if ($form->isValid()) {
...
}
...
我不能得到上述工作,表单实例从未提交。
- 是否有使用窗体组件并且使用
ParamConverter
直接与验证器一起的任何优势 - 这里的理念是:
-
/**
* @ParamConverter("guest", converter="fos_rest.request_body")
*/
public function cpostAction(Guest $guest)
{
$violations = $this->getValidator()->validate($guest);
if ($violations->count()) {
return $this->view($violations, Codes::HTTP_BAD_REQUEST);
}
$this->persistAndFlush($guest);
return ....;
}
谢谢!
也许[this](https://www.cloudways.com/blog/rest-api-in-symfony-3-1/)文章可以帮助你。 –
在我看来它与你的fos_rest配置有关。你能在这里分享吗? –