Symfony 构建子表单

Symofony building subform

我正在尝试创建一个特殊的表格,首先我有一个关于专业的表格,并且它有作为属性的经验。我将这些值添加到我的表单中:

$builder->add('job_company');
$builder->add('job_position');

问题是我希望能够通过一个按钮生成多个体验。 我应该使用 symphony 的 CollectionType,但我不知道我是否需要为体验创建另一种特殊形式,所以当我单击按钮时,我创建了具有不同名称的输入(如果我想要,这个名称必须不同验证它们)。

我试过使用:

->add('experiences', CollectionType::class, array(
        'entry_type'   => TextType::class,
        'allow_add'  => true,
        'allow_delete' => true,
    ))

但是当我尝试渲染它时 ({{ form_widget(form.experiences)}}),我得到了这些错误:

AppBundle\Entity\ProfessionalExperience could not be converted to string

我也试过了({{ form_widget(form.experiences.company)}})但是我无法得到这个变量。

我怎样才能正确地做到这一点?

感谢您的帮助。

您已声明您的 experiences 子表单是 TextType,因此

{{ form_widget(form.experiences)}}

正在尝试创建一个简单的 <input/> 字段并设置其值。当您提供 AppBundle\Entity\ProfessionalExperience 实例时,输入的值是一个简单的字符串。这就是您收到此错误的原因。

您不希望它成为 TextType。它应该是某种自定义形式 class,例如 ExperienceType

->add('experiences', CollectionType::class, array(
        'entry_type'   => ExperienceType::class,
        'allow_add'  => true,
        'allow_delete' => true,
    ))

您当然应该创建这样的表单 class,其中的字段适合您的 AppBundle\Entity\ProfessionalExperience 实体