【问题标题】:Symfony form handleRequest not populatingSymfony 表单句柄请求未填充
【发布时间】:2016-09-01 12:48:44
【问题描述】:

我有一个 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] => 
)

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

【问题讨论】:

  • 你什么时候做$userForm->getData() 应该在处理请求并检查$userForm->isValid() 之后完成。
  • 好的,它报告它无效。但我不知道如何得到错误。
  • 请参阅下面的示例代码,并尝试像我展示的那样匹配您的代码结构。一旦你有了这个想法,你可以随心所欲地进行调整。如果您有任何困惑,请告诉我们。

标签: php forms symfony-3.1


【解决方案1】:

要从表单请求中自动填充实体,您必须将您的实体绑定到 FormType 类。您的UserType 课程中可能缺少此绑定。在UserType 表单中,您应该在其中添加一个方法configureOptions,在data_class 键中指定entity class name。要对它有更多的了解,请参阅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-&gt;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(),
    ]);
}

【讨论】:

  • 谢谢。有用。顺便说一句,知道为什么表单获取数据会返回多个用户类型的条目吗?我傻眼了
  • 如果它适合您,请将我的答案标记为已接受的答案。我没明白 User 类型的多个条目是什么意思?
  • 嘿@Samundra!请问您也可以帮我解决这个问题吗?我已经坚持了几个星期,但我的表格比这个更复杂。在避免网站上可能出现的问题重复的情况下,如何更好地进行讨论?谢谢
  • 嗨@PaulBurilichev 我建议写一个新线程并链接这个问题。这样你也有参考。
  • @Samundra 这是我的问题stackoverflow.com/questions/56639112/…
猜你喜欢
  • 2011-12-11
  • 1970-01-01
  • 2015-12-07
  • 2018-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多