首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同域多次符号4形式

同域多次符号4形式
EN

Stack Overflow用户
提问于 2018-08-14 18:43:57
回答 2查看 1.2K关注 0票数 0

我有一个实体Report,它包含许多Report

代码语言:javascript
复制
class Report
{
    /**
     * @ORM\OneToMany(targetEntity="App\Entity\Answer", mappedBy="report")
     */
     private $answers; 
     ...
}

class Answer
{

    /**
     * @ORM\ManyToOne(targetEntity="Report", inversedBy="answers")
     */
     private $report;
     ...
}

我在我的ReportType中手动添加了这些问题(我知道这不是最好的答案,但问题不会改变,我只对答案感兴趣)。

代码语言:javascript
复制
class ReportAnswersType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {

        $builder->add('answers', ChoiceType::class, array(
            'label' => 'Room state',
            'multiple' => false, 'expanded' => false,
            'choices'  => array('OK' => 'OK', 'NG' => 'NG', 'NP' => 'NP',),
        ))
        ->add('answers', IntegerType::class, array(
            'label' => 'Temperature',
        ))
        ->add('answers', ChoiceType::class, array(
            'label' => 'Is it good?',
            'multiple' => false, 'expanded' => false,
            'choices'  => array('YES' => 'YES', 'NO' => 'NO',),
        ))
        ...
    }
    ->add('save', SubmitType::class);
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults(array(
        'data_class' => Report::class,
    ));
}

我想要做的是生成一个包含3个问题的表单,并在数据库中插入每个答案。

但呈现的表单只显示最后一个问题(因为对于每个->add(‘答案’,.)我替换最后一个增加的)。

我尝试了不同的解决方案来解决这个问题:

  • 按照关于如何嵌入表单集合的文档,它包括将每个答案(带有问题的标签)添加到Controller中的报表中,然后呈现ReportType。这方面的问题是,我的每个问题都有不同的类型(选择,文本,整数.)我不知道如何定制它们。
  • 我也尝试在我的ReportType中做ReportType,但它只显示了最后一个问题。

我很感谢你的帮助,谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-16 17:49:29

我设法让它起作用了。最后,我遵循了如何嵌入表单集合上的说明。

为了使其正常工作,我将字段问句questionType添加到my 应答实体中。在AnswerType.php上,我每次检查它是什么类型的问题,然后根据它创建答案的类型。看起来是这样的:

代码语言:javascript
复制
 $builder->addEventListener(FormEvents::POST_SET_DATA, function ($event) {
        $builder = $event->getForm();
        $answer = $event->getData();
        $questionType = $answer->getQuestionType();
        $question = $answer->getQuestion();
        if ($questionType == 1){
            $builder->add('answer', ChoiceType::class, array(
                'label' => $question,
                'multiple' => false, 'expanded' => false,
                'choices'  => array('OK' => 'OK', 'NG' => 'NG', 'NP' => 'NP',),
            ));
        }
        else if($questionType == 2){
            $builder->add('answer', ChoiceType::class, array(
                'label' => $question,
                'multiple' => false, 'expanded' => false,
                'choices'  => array('SI' => 'SI', 'NO' => 'NO',),
            ));
        }
       else ...
 }
票数 0
EN

Stack Overflow用户

发布于 2018-08-15 18:51:25

您可以使用实体属性值模型来解决这个问题。我建议使用sidus/eav-模型包。这将是一项很大的工作,但你会学到很多。使用EAV模型,您可以有N个问题和答案。我想不出用简单的表单类型来解决这个问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51847939

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档