0

PersonType特定の人の子供をマップする必要があるコレクションフィールドを持つsymfony 2フォーム「PersonType」を作成しようとしています。

そして、私はこのエラーを受けています、

{"message":"unable to save order","code":400,"errors":["This form should not contain extra fields."]}

これが私のPersonエンティティです。

class Person
{
    private $id;

    /**
     * @ORM\OneToMany(targetEntity="Person", mappedBy="parent", cascade={"persist"})
     */
    private $children;

    /**
     * @ORM\ManyToOne(targetEntity="Person", inversedBy="children")
     * @ORM\JoinColumn(name="orderitem_id", referencedColumnName="id", nullable=true)
     */
    private $parent;

}

そして私のタイプは、

class PersonType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id')
            ->add('children', 'collection', array(
                'type' => new PersonType()
            ))
        ;
    }

更新:問題はオプションが原因であることがわかりました:

'allow_add' => true,
'by_reference' => false

タイプにありませんでした。挿入するとフォームが表示されず、エラーなしでページがクラッシュするため、削除しました。

このエラーでは、人々は子供を持つことができないので、私は非常に混乱しています:/

誰かがすでに同じ問題に直面していますか? (自身の上にネストされた formType)

実際:私は自分の personType を PersonchildrenType に複製して、これを最初の最後に挿入しました...

4

2 に答える 2

0

ここで説明されているように、フォームをサービスとして登録してみてください: http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services、次のようにフォームを変更します:

class PersonType extends AbstractType
{
    public function getName()
    {
        return 'person_form';
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('id')
            ->add('children', 'collection', array(
                'type' => 'person_form',
                'allow_add' => true,
                'by_reference' => false
            ))
        ;
    }
}
于 2013-10-30T10:25:05.400 に答える