luq*_*o33 5 rest symfony-forms symfony fosrestbundle
我不清楚如何使用带有FOSRestBundle的Symfony表单组件来创建用于创建资源的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;
}
Run Code Online (Sandbox Code Playgroud)
我所做的是:
application/json向端点发送POST请求(/guests);Guest)的表单实例;json_decode将请求提交给表单($form->submit($data)).我有的问题:
json_decode()将Request内容提交到表单之前,我是否真的需要手动处理内容?使用FosRestBundle可以以某种方式自动化此过程吗?application/x-www-form-urlencoded数据发送到控制器操作并通过以下方式处理:-
$form->handleRequest($request)
if ($form->isValid()) {
...
}
...
Run Code Online (Sandbox Code Playgroud)
我无法完成上述工作,表单实例从未提交过.
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 ....;
}
Run Code Online (Sandbox Code Playgroud)
谢谢!
小智 0
我正在尝试对你做同样的事情,但很难找到这个主题的答案。我认为今天为移动应用程序开发带有 API Rest 的网站是一个重要的主题。反正!
请在下面找到我的答案:
在将请求内容提交到表单之前,我真的总是必须手动对其进行 json_decode() 吗?
不,我得到这样的数据 $params = $request->query->all(); $user->setUsername($params['fos_user_registration_form']['用户名']);
这个过程可以通过 FosRestBundle 以某种方式自动化吗?
我不这么认为。
是否可以将 application/x-www-form-urlencoded 数据发送到控制器操作并使用
是的,但我目前正在尝试这样处理我的表格,但我做不到。
与直接使用 ParamConverter 和验证器一起使用表单组件是否有任何优势 - 这是想法:
不
我猜我是否只会使用以下命令注册用户:
$userManager = $this->get('fos_user.user_manager');
并手动进行控制。
我在这里发布了一个问题,我正在等待: https://github.com/FriendsOfSymfony/FOSUserBundle/issues/2405
您是否设法获得更多信息?