2

我有以下设置:

实体结果

/**
 * @ORM\OneToMany(targetEntity="Answer", mappedBy="result", cascade={"persist", "remove"}, orphanRemoval=true)
 */
private $answers;

实体回答

/**
 * @ORM\ManyToOne(targetEntity="Result", inversedBy="answers", cascade={"persist"})
 * @ORM\JoinColumn(name="result_id", referencedColumnName="id")
 */
private $result;

表单结果类型

public function buildForm(FormBuilderInterface $builder, array $options)
{      
    $builder
        ->add('answers', 'collection', array(
            'type' => new AnswerType(),               
        ))
    ;
}

Form AnswerType : - 我想动态化的这个,目前已弃用:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('value', 'choice', array(
        'choices'   => Answer::getChoices(),
        'expanded'  => true,
        'required'  => true,
    ))
    ;
}

我想做的事:

结果表单有一个AnswerType 的集合。我希望每个 AnswerType 都是动态的,具体取决于链接到的当前答案

例如,如果我有一个函数Answer::getRandomStatus()- 如果它是真的- valueAnswerType 的字段是textchoice否则。

我的猜测是buildForm,AnswerType但是$builder->getData() returns null,我无法区分。

4

2 回答 2

3

这应该给你你正在寻找的答案:

http://symfony.com/doc/2.0/cookbook/form/dynamic_form_modification.html

为了更好地理解上述内容,您可以查看:

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/FormEvents.php

于 2013-02-27T09:41:57.800 回答
0

我也在寻找这个,但想要一个已经实施的解决方案。查看 CollectionType 的源代码,它广泛使用了这些事件。

https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.php https://github.com/symfony/symfony/blob/master/src /Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php

于 2013-09-13T19:28:20.587 回答