1

私はこのクックブックの例と非常によく似たことをしていますhttp://symfony.com/doc/current/cookbook/form/dynamic_form_generation.html#adding-an-event-subscriber-to-a-form-class

主な違いは、フィールド タイプがテキスト タイプではなくエンティティであることです。

したがって、フィールド サブスクライバーの preSetData メソッドは次のようになります。

public function preSetData(DataEvent $event)
{
    $data = $event->getData();
    $form = $event->getForm();

    if (null === $data) {
        return;
    }

    if(!$data->getIsCategorized()){

        $form->add(

            $this->factory->createNamed('categories', 'entity', array(
            'class' => 'My\PostBundle\Entity\Category',
            'property'     => 'name',
            'multiple'     => true,
            'label' => 'Category'
            )
            )
        );
    }
}

これにより、次のエラーが発生しています

Class does not exist
500 Internal Server Error - ReflectionException 

エンティティをフォーム タイプに直接追加すると、正常に$builder->add('categories, 'entity', array(...動作します

この方法でフィールド イベント サブスクライバーを使用してエンティティ フィールド タイプをフォームに添付することは可能ですか?

4

2 に答える 2

1

同じ問題に遭遇しましたが、実際にはfactory->createNamed()メソッドがbuilder->addよりも多くの引数を持っているためです。3 番目の引数はオプション配列ではなく、「データ」引数です。

だからここにあなたがすべきことです:

    $form->add(

        $this->factory->createNamed('categories', 'entity', null, array(
        'class' => 'My\PostBundle\Entity\Category',
        'property'     => 'name',
        'multiple'     => true,
        'label' => 'Category'
        )
        )
    );

(オプション配列の前に null を追加)

于 2012-08-02T12:02:56.713 に答える
0

タイプにフィールドをアタッチするか、イベント リスナー/サブスクライバーを使用してアタッチするかにかかわらず、違いはありません。どこかに小さな間違いがある (可能性が高い) か、それがバグである場合は、 issue trackerに送信する必要があります。

于 2012-07-27T08:46:50.323 に答える