車のアプリケーションに関連して、ユーザーがブランドとモデルを選択できるフォームがあります。目的は、モデルがブランドに依存することです。たとえば、「ブランド 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' );
}
}