如何使用表单构建器在Symfony 4控制器中获取表单值

时间:2018-08-19 08:29:34

标签: php symfony-forms builder symfony4

我想更新数据,并且需要使用表单生成器来创建表单。我看到了类似的问题,但这对我不起作用。

我的表单生成器。我认为可以。

class GeneralInfoType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('username', TextType::class, ['label' => false])
            ->add('email', EmailType::class, ['label' => false])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([

        ]);
    }
}

我在树枝上的表格。我在表单上发送ID当前用户。

 {{ form_start(form, {'action': path('updateInfo',{'id':users.id}), 'method': 'GET'}) }}
 {{ form_row(form.username, {'value' : users.username, 'attr': {'class': 'form-control'} }) }}
 {{ form_row(form.email, {'value' : users.email, 'attr': {'class': 'form-control'} } )  }}
 <button type="submit" class="btn btn-primary">Update</button>
 {{ form_end(form) }}

我的控制器。

/**
     * @Route("user/profile/{id}", name="updateInfo")
     * @param $id
     * @param Request $request
     * @return Response
     */
    public function updatePersonalInfoAction($id, Request $request)
    {
       $em = $this->getDoctrine()->getManager();
       $user = $em->getRepository('App:User')->find($id);
       $form = $this->createForm(GeneralInfoType::class, $user);
       $username = $form->get('username')->getData();
       dump($username);
     }

当我尝试转储用户名时,我从服务器获取了""或null。

1 个答案:

答案 0 :(得分:0)

为您的控制器尝试一下:

/**
 * @Route("user/profile/{id}", name="updateInfo")
 * @param $id
 * @param Request $request
 * @return Response
 */
public function updatePersonalInfoAction($id, Request $request)
{
    $user = $em->getRepository('App:User')->find($id);
    $form = $this->createForm(GeneralInfoType::class, $user);

    $form->handleRequest($request);

    if ($form->isSubmitted()) {
        $username = $form->get('username')->getData();
        dump($username);

        // you can save the update user info with this:
        $user = $form->getData();
        $em = $this->getDoctrine()->getManager();
        $em->persist($user);
        $em->flush();

    }

    return $this->render('insert_twig_file_path/name', [
        'form' => $form->createView()
    ]);
 }

您还可以利用一些自动魔术的symfony函数来简化一点:

/**
 * @Route("user/profile/{id}", name="updateInfo")
 * @param Request $request
 * @param User $user
 * @return Response
 */
public function updatePersonalInfoAction(Request $request, User $user)
{
    $form = $this->createForm(GeneralInfoType::class, $user);

    ... the rest unchanged ...

 }