2017-03-14 17 views
1

私はフォームのDoctrine ORMを実装しているSymfony2 CRMに取り組んでいます。 CRMのフォームの1つは顧客の住所を作成するためのもので、ストリート、都市、郵便番号などのすべての標準テキストフィールドがありますが、国や郡のドロップダウンもあります。問題は、データベースからすべての郡を取得した場合、そのリストは膨大であり、年齢がかかるだけでなく、クライアントが郡を見つけることは非常に難しいことです。Doctrineで前回選択した値に基づいて選択フィールドに値を設定する方法は?

私が望むのは、まず国を選択してから郡のフィールドを選択した国に基づいて自動入力することです。しかし、私はDoctrineでこれをどうやって行うのか分かりません。ここで

は(ここでは、ゾーンは郡を意味していることに注目)フォームタイプの私buildForm機能です:

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    $builder->add('company' , 'text', array('required' => false)); 
    $builder->add('firstname' , 'text', array('required' => true, 'label' => 'First name')); 
    $builder->add('lastname' , 'text', array('required' => true, 'label' => 'Last name')); 
    $builder->add('address1' , 'text'); 
    $builder->add('address2' , 'text', array('required' => false)); 
    $builder->add('city' , 'text'); 
    $builder->add('country' , 'entity', 
     array(
      'class' => 'AppBundle:Oc49Country', 
      'property' => 'name', 
      'empty_value' => 'Choose an option', 
     )); 
    $builder->add('zone' , 'entity', 
     array(
      'class' => 'AppBundle:Oc49Zone', 
      'query_builder' => function (EntityRepository $er) { 
       return $er->createQueryBuilder('z') 
        ->orderBy('z.name', 'ASC'); 
      }, 
      'empty_value' => '-- Please select --', 
      'required' => true, 
      'label' => 'County/State' 
     )); 
    $builder->add('postcode' , 'text'); 
    $builder->add('save', 'submit', array(
     'attr' => array(
      'class' => 'btn btn-primary' 
     ), 
    )); 
} 

は、郡のリストをフィルタリングするために、クエリビルダに追加のパラメータを追加する方法はあります、 急いで?

答えて

0

symfonyがすでにページをレンダリングした後に郡選択リストを変更したいので、郡選択リストだけを更新するには何らかの方法でajaxを使用する必要があります。

jquery/ajaxコールを使用して、選択した国に基づいて郡選択リストを設定します。あなたの小枝テンプレートから、これらの線に沿っていくつかのjqueryの機能を追加します。

$('#country_select).on('change', function() { 
    url: '/path/to/controller/to/get/countyList', 
    method: 'GET' 
}).done(function() { 
    // update options 
}); 

This question詳細に役立ちます。明らかに私のコードは荒いですが、うまくいけば、これは役に立ちます。

+0

私はこのようにする方法を知っています。私はこれまでにこのようなことを実装しましたが、私はDoctrineメソッドを使ってそれを行う方法を見つけようとしています。私は選択された国をチェックするためにリスナーを追加する方法があるのか​​どうか疑問に思っていましたが、私はそれをどうやってやるのか本当にわかりません... –

+0

実際、考えてみると、再選択されるまで選択ボックスを無効にします。ありがとう –

+0

私が見ている最も近いことは、これが近づいたことです:http://symfony.com/doc/current/form/dynamic_form_modification.html。オプション3を参照してください。私はこれがまさにあなたが望んでいるとは思わない。私は自分自身を試していないので、おそらく私は間違っています。 – ehymel

関連する問題