【问题标题】:How to use different input types for one entity CollectionType - Symfony 3如何为一个实体 CollectionType 使用不同的输入类型 - Symfony 3
【发布时间】:2017-03-15 15:55:29
【问题描述】:

在 Symfony 3.2.4 和 PHP 5.6.28 中

我正在一个专用捆绑包中制作一个调查系统。 我有 3 个实体问题/答案/调查

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

调查类型:

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,
         )
     );

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

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

我需要的“答案字段类型”存储在数据库表问题中。

question.table

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

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

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

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

【问题讨论】:

  • 你确定这行得通吗?您是否尝试过多个问题/答案?在我看来,这将呈现一组问题,然后呈现一组答案。看来您应该使用单个问题和答案组合构建一个表单,然后呈现这些单个表单的集合。然后,单个表单可以使用表单事件订阅者来实现我在下面建议的解决方案,以呈现正确输入类型的问题/答案组合。
  • 我的视图中只需要一张表格(一份调查)。这就是为什么我有 2 个 collectionType :用于答案和问题。我正在使用无法用于多项调查的特定 js 和 css。

标签: forms symfony collections types field


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-28
    • 2016-06-26
    • 1970-01-01
    相关资源
    最近更新 更多