我正在开发一个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'
),
));
}
有没有办法在查询构建器中添加其他参数,以便即时过滤县名单?
答案 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将有助于细节。显然我的代码很粗糙,但希望这会有所帮助。