使用FOSRestBundle中的Symofny Forms处理POST请求

时间:2016-12-29 14:19:37

标签: rest symfony symfony-forms 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;
}

我的工作是:

  1. 向端点(application/json)发送/guests POST请求;
  2. 创建绑定到实体(Guest);
  3. 的表单实例
  4. 由于我正在发送JSON,我需要json_decode请求正文,然后再将其提交到表单($form->submit($data))。
  5. 我提出的问题:

    1. 在将其提交到表单之前,我是否真的必须手动json_decode() Request内容?这个过程可以通过FosRestBundle以某种方式实现自动化吗?
    2. 是否可以将application/x-www-form-urlencoded数据发送到控制器操作并通过以下方式处理:
    3. -

      $form->handleRequest($request)
      if ($form->isValid()) {
          ...
      }
      ...
      

      我无法完成上述工作,表单实例从未提交过。

      1. 使用表单组件与使用ParamConverter直接与验证器一起使用是否有任何优势 - 这是一个想法:
      2. -

        /**
         * @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 ....;
        }
        

        谢谢!

1 个答案:

答案 0 :(得分:0)

我正在尝试对你做同样的事情,很难找到这个主题的答案。我认为今天开发适用于移动应用的api rest网站是一个重要的主题。反正!

请在下面找到我的答案:

  
    

在将请求内容提交到表单之前,我是否真的必须手动使用json_decode()?

  

不,我得到这样的数据 $ params = $ request-> query-> all(); $用户> 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

您是否设法获得更多信息?