Symofony建筑子窗体

时间:2017-01-16 11:44:40

标签: php symfony 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无法转换为字符串

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

我该怎么做呢?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

您已宣布experiences子表单为TextType,因此

{{ form_widget(form.experiences)}}

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

你不希望它是TextType。它应该是某种自定义表单类,如ExperienceType

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

当然,您应该使用适合AppBundle\Entity\ProfessionalExperience实体

的字段创建此类表单类