【问题标题】:Bulk setting Symfony form field values with setData in SF4.4在 SF4.4 中使用 setData 批量设置 Symfony 表单字段值
【发布时间】:2021-07-15 09:22:15
【问题描述】:

在我的 Symfony 4.4 应用程序中,我的控制器中有以下代码。我正在尝试根据以前的提交或从数据库中提取的数据预先填充表单。重要的是,DetailsType 表单包含多个实体,因此这里的每个表单设置都不是一个干净的 1 个实体。

    $postVars = $request->request->all();

    $formData = [];
    if (count($postVars) > 0) {
        $formData = $postVars['crmbundle_register_details'];
    }

    $form = $this->createForm(DetailsType::class, $formData, [
        'attr' => ['class' => 'reCaptchaForm'],
    ]);

    $form->setData([
        'firstname' => $person->getFirstname(),
        'lastname' => $person->getLastname(),
        'email' => $person->getEmail(),
        'country' => $person->getCountry(),
        'timezone' => $person->getTimezone()
    ]);

我的问题是,如果我尝试使用上面的setData 预先填充表单,它不起作用。

如果我按照下面的方式单独执行它,它可以工作,但我不明白为什么。我宁愿传递 setData 一个数组,而不是多次调用 setData

    $form->get('firstname')->setData($user->getFirstname());
    $form->get('lastname')->setData($user->getLastname());
    $form->get('email')->setData($user->getEmail());
    $form->get('country')->setData($user->getCountry());
    $form->get('timezone')->setData($user->getTimezone());

【问题讨论】:

    标签: php forms symfony symfony-forms symfony-4.4


    【解决方案1】:

    如果表单包含许多实体,最好为每个实体设置一个embed form。在这种情况下,您根本不需要调用 setter。控制器操作代码将是:

    $form = $this->createForm(DetailsType::class, $someParentEntity, [
        'attr' => ['class' => 'reCaptchaForm'],
    ]);
    $form->handleRequest($request);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-04
      • 2014-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多