3

我有一个 symfony 3 表格。我试图用这样的handleRequest填充它:

$user = new User();
$userForm = $this->createForm(UserType::class, $user);
print_r($request->request->all());
$userForm->handleRequest($request);

print_r($userForm->getData());

我得到的输出是:

Array
(
    [firstName] => test
    [last_name] => test
    [email] => test@test.test
    [password] => erkeferke
    [gender] => F
    [supervisor] => 1
)
AppBundle\Entity\User Object
(
    [id:AppBundle\Entity\User:private] => 
    [firstName] => 
    [lastName:AppBundle\Entity\User:private] => 
    [email:AppBundle\Entity\User:private] => 
    [password:AppBundle\Entity\User:private] => 
    [photo:AppBundle\Entity\User:private] => 
    [gender:AppBundle\Entity\User:private] => 
    [supervisor:AppBundle\Entity\User:private] => 
    [duties:AppBundle\Entity\User:private] => 
    [lastLogin:AppBundle\Entity\User:private] => 
    [createdAt:AppBundle\Entity\User:private] => 
    [updatedAt:AppBundle\Entity\User:private] => 
    [deletedAt:AppBundle\Entity\User:private] => 
)

知道为什么它没有填充吗?

4

1 回答 1

2

要从表单请求中自动填充实体,您必须将您的实体绑定到 FormType 类。您可能在UserType课堂上缺少此绑定。在表单中UserType,您应该在configureOptions其中添加一个方法,您指定entity class nameindata_class键。要对它有更多的了解,请查看Symfony Forms并向下滚动到Setting the data_class主题。另请参阅下面的示例,其中我列出了用法。

<?php namespace AppBundle\Form;

...

class SiteType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
       // define form fields
    }


    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Site', // Entity to resolve to
        ));
    }
}

现在,当您使用表单时,您的实体将从请求中解析,如下所示$site = $form->getData()将返回Site实体。第一次做对这是相当棘手的。你必须练习很多,直到你掌握它。让我们知道您是否对此感到困惑。

 /**
 *
 * @param Request $request
 *
 * @return \Symfony\Component\HttpFoundation\Response
 *
 * @Route("/sites/create", name="_create_site")
 */
public function createSite(Request $request)
{
    $site = new Site;
    $form = $this->createForm(SiteType::class, $site);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {           
        $site = $form->getData();  // It will return Site Entity

        ...

        $this->addFlash('success', 'Record added successfully.');
    }

    return $this->render('sites/create.html.twig', [
        'site_form' => $form->createView(),
    ]);
}
于 2016-09-01T13:29:18.930 回答