在symfony中将表单字段添加到子表单

时间:2018-09-25 11:02:54

标签: forms symfony4

Symfony 4.1

这是我的个人表单类型:

class PersonalType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('firstName', TextType::class, [
                'required' => true,
                'attr'     => [
                    'placeholder' => 'First name'
                ],
            ])
    //......

这是我的ClientType,使用PersonalType作为子窗体

    class ClientType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
      $client = $builder->getData();
        $builder
            ->add('personalDetails', PersonalType::class, [
                'data' => $client
            ])
//....

我已经将事件侦听器添加到了子窗体类型,但是没有被调用,所以我将事件侦听器移到了ClientType。

我想向PersonalType添加一个字段,我这样做是这样的:

$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) {
          $client = $event->getData();
          $form = $event->getForm();

$form->add('title', TextType::class, [
   'type' => new PersonType(),
    'label' => 'Title'
]
    }

但是我遇到一个错误,说option "type" does not exists

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

['type'=> ...]选项不是Symfony的TextType的有效选项。有关有效选项,请参见此处的参考:https://symfony.com/doc/current/reference/forms/types/text.html。您还可以在此处查看其他内置表单类型的有效选项:https://symfony.com/doc/current/reference/forms/types.html

也许您已经看到了一种自定义表单类型,该类型通过使用带有configurationOptionssetDefaults的{​​{1}}方法来定义“类型”选项(请参见此处:https://symfony.com/doc/current/form/create_custom_field_type.html )。我猜这是从您的PersonType。 TextType不支持。

我不确定您到底想怎么做

setRequired

行。如果您只是想将“ title”字段添加到PersonType中,并且由于某种原因,您想使用事件侦听器而不是直接在PersonType类中进行操作(这在大多数情况下是最简单的选择),感觉只是删除该行就足以使其正常工作?