2

車のアプリケーションに関連して、ユーザーがブランドとモデルを選択できるフォームがあります。目的は、モデルがブランドに依存することです。たとえば、「ブランド A」を選択すると、ブランド A に関連するモデルのみが表示されます。

今のところ、初期フォーム (データが設定されていない) で既にブロックされています。デフォルトのブランドが表示されており、このブランドに関連するモデルを表示してほしい。

いくつかのチュートリアルに従ってイベント サブスクライバーを追加しましたが、機能させることができません。ブランドのフィールド値をサブスクライバーに取得できません... ブランド エンティティを取得しようとしましたが、論理的には空です (フォームが送信されていないため)。

誰にもアイデアがありますか?

フォームタイプ:

public function buildForm( FormBuilderInterface $builder, array $options ) {

    $builder->add( 'brand', 'entity', array(
        'class' => 'MyBundle:Brand',
        'property' => 'name',
    ));

    $builder->add( 'model', 'entity', array(
        'class' => 'MyBundle:Model',
        'property' => 'name',   
    ));


    /* Add event for the first model choices */
    $builder->addEventSubscriber( new ModelChoicesSubscriber() );
}

FormSubscriber :

class ModelChoicesSubscriber implements EventSubscriberInterface {

    public static function getSubscribedEvents() {

        return array( FormEvents::PRE_SET_DATA => 'preSetData' );
    }

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

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

        $brand = $form->get( 'brand' );
    }

}
4

0 に答える 0