如何根据Doctrine中先前选择的值填充选择字段?

时间:2017-03-14 17:57:08

标签: symfony doctrine

我正在开发一个Symfony2 CRM,它为表单实现Doctrine ORM。 CRM上的其中一种形式是创建客户地址,并具有所有标准文本字段,如街道,城市,邮政编码等,还有国家和县的下拉列表。问题是,如果我从数据库中检索所有县,那么列表很大,不仅需要很长时间才能加载,但我的客户很难找到该县,因为它适用于世界上每个国家/地区。

我希望他们首先选择国家/地区,然后根据所选国家/地区自动填充县字段。但是,我不确定如何在Doctrine中这样做。

以下是表单类型中的buildForm函数(注意这里,Zone表示县):

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'
        ),
    ));
}

有没有办法在查询构建器中添加其他参数,以便即时过滤县名单?

1 个答案:

答案 0 :(得分:0)

由于您希望在symfony已经呈现页面后更改县选择列表,因此您必须以某种方式使用ajax来更新该县选择列表。

我会使用jquery / ajax调用来根据所选国家/地区填充县选择列表。从你的twig模板中,沿着以下几行添加一些jquery函数:

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

This question将有助于细节。显然我的代码很粗糙,但希望这会有所帮助。