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;

フォームResultType

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に応じて動的になるようにします。

たとえば、関数がオンになっているAnswer::getRandomStatus()場合(trueのvalue場合) 、AnswerTypeのフィールドはそう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 に答える