如何为一个实体CollectionType使用不同的输入类型 - Symfony 3

时间:2017-03-15 15:55:30

标签: forms symfony collections types field

Symfony 3.2.4和PHP 5.6.28中的

我在一个专门的Bundle中制作了一个Survey系统。 我有3个实体问题/答案/调查

SurveyType基于2个CollectionType :一个包含问题,另一个包含答案。

SurveyType:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add(
            'question',
            CollectionType::class,
            array(
                'entry_type' => QuestionType::class)
        )
         ->add(
             'answer',
             CollectionType::class,
             array(
                 'entry_type' => AnswerType::class,
         )
     );

如果我只需要文字或数字作为答案,那么到目前为止一切正常。

问题是我需要不同"答案输入类型" :复选框,范围,文本...每个问题。

"答案字段类型"我需要的是存储在DB表格中。

question.table

在控制器中生成我的表单时,我只能有一种输入类型。

 $form = $this->createForm(SurveyType::class, $survey, array(
        'question_type' => 'range'
    ));

例如,我的所有答案都只能是范围或文字。我无法混合答案输入类型 Only Range

有没有办法说:"对于问题(1)我希望我的答案是一个字符串但问题(2)我想要一个范围"它们都是同一个SurveyForm的一部分吗?

1 个答案:

答案 0 :(得分:0)

您可以根据所需的答案类型动态构建表单。请参阅文档页面here。您必须在事件订阅者类中添加一些逻辑才能返回正确类型的输入。