2015-10-17 100 views
0

我有这种关联。国与国之间一对多。国家之间对一对多的城市。更新状态,城市下拉根据国家选择Symfony

就业形式,我必须显示这些下拉列表,我想当我选择一个国家,只有它相关的状态显示。现在它显示所有。

这是我的表单代码。

<?php 

namespace PNC\UsersBundle\Form; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolver; 
use Symfony\Component\Form\FormBuilder; 
use Doctrine\ORM\EntityRepository; 
use Symfony\Component\Form\FormEvents; 
use Symfony\Component\Form\Event\DataEvent; 

class EmploymentsType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder ->add('designation', 'text', array(
        'required' => true, 
        'label' => 'Designation ', 
        'attr' => array(
         'required' => true, 
         'placeholder' => 'Designation Name', 
         'invalid_message' => 'You entered an invalid designation', 
         'class' => 'form-control' 
        ))) 
        ->add('organization', 'text', array(
        'label' => 'Organization', 
        'attr' => array(
        'required' => true, 
        'placeholder' => 'Organization Name', 
        'invalid_message' => 'You entered an invalid organization', 
        'class' => 'form-control' 
        ))) 
        ->add('country', 'entity', array(
         'label' => ucfirst('country'), 
         'class' => 'PNCGeneralBundle:Country', 
         'property'=>'name', 
         //'property_path'=>false, //Country is not directly related to City 
         'attr'=> array(
          'required' => true, 
          'invalid_message' => 'You selected an invalid Industry', 
          'class' => 'form-control' 
         ) 
        )) 
        ->add('state', 'entity', array(
         'label' => ucfirst('state'), 
         'class' => 'PNC\GeneralBundle\Entity\State', 
         'attr'=> array(
          'required' => true, 
          'invalid_message' => 'You selected an invalid Industry', 
          'class' => 'form-control' 
         ) 
        )) 
        ->add('city', 'entity', array(
         'label' => ucfirst('city'), 
         'class' => 'PNC\GeneralBundle\Entity\City', 
         'attr'=> array(
          'required' => true, 
          'invalid_message' => 'You selected an invalid Industry', 
          'class' => 'form-control' 
         ) 
        )) 
        ->add('save', 'submit', array(
         'attr' => array(
          'label' => ucfirst('save'), 
          'class' => 'btn btn-success' 
         ) 
        )); 
    } 

    public function configureOptions(OptionsResolver $resolver) 
    { 
     $resolver->setDefaults(array(
      'data_class' => 'PNC\UsersBundle\Entity\Employments', 
     )); 
    } 

    public function getName() 
    { 
     return 'pncusers_bundle_employments_type'; 
    } 
} 
+0

请减小尺寸。你可以向两个国家和两个国家展示同样的问题,而不包括城市(这将是相同的想法)。 – Teepeemm

回答

2

我想说最简单的方法是通过JavaScript显示/隐藏选项。将国家,州和城市转储为JSON,并将其用作JS的决策源。

+0

你能举个实例吗? –

+0

这里你去:https://jsfiddle.net/3nn3441d/13/ –

+0

这是一个很好的方式来实现它 – Baig