我有以下设置:
实体结果:
/**
* @ORM'OneToMany(targetEntity="Answer", mappedBy="result", cascade={"persist", "remove"}, orphanRemoval=true)
*/
private $answers;
实体答案:
/**
* @ORM'ManyToOne(targetEntity="Result", inversedBy="answerswers", 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(),
))
;
}
表单AnswerType:-我想让这个动态的,目前不推荐使用:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('value', 'choice', array(
'choices' => Answer::getChoices(),
'expanded' => true,
'required' => true,
))
;
}
我想做的事:
结果表单有一个AnswerType集合。我希望每个AnswerType都是动态的,这取决于答案链接到的当前。
例如,如果我在Answer::getRandomStatus()
上有一个函数-如果它是true-则AnswerType的value
字段为text
,否则为choice
。
我的猜测是AnswerType
的buildForm
方法,但$builder->getData() returns null
,我无法区分。
这应该会给你想要的答案:
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
我也在寻找这个,但想要一个已经实现的解决方案。看看CollectionType的源代码,它大量使用了这些事件。
https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/Type/CollectionType.phphttps://github.com/symfony/symfony/blob/master/src/Symfony/Component/Form/Extension/Core/EventListener/ResizeFormListener.php