symfony2,表单构建器,如何初始显示一个空实体选择列表

问题描述:

我有3个实体:Make,Model和Auto。 Make - > Model是一对多关系,Auto-> Model是多对多关系。symfony2,表单构建器,如何初始显示一个空实体选择列表

我想要实现的是能够生成一个表格,其中包括Make(例如福特,欧宝)列表,并且最初加载一个空的模型列表。只有在列表中选择了制造商时,才能填充型号列表,这是通过ajax调用实现的。

我的问题是我需要做的事情模型列表最初是空的,因为表单构建器使用任何Make中的所有模型进行填充。

我可以通过使用query_builder来实现类似的功能,并假设搜索不存在的模型,但这不是赖特的方式。

class AutoType extends AbstractType { 
    public function buildForm(FormBuilder $builder, array $options) { 
     $builder->add('make','choice', array(
        'choices'=>Array('1'=>'Opel', '2'=>'Ford'), 
        'property_path'=>false, 
        'label'=>'Make')) 
       ->add('model', 'entity', array( // this fetches all models. Also don't want a subset of models, just empty list with 'Select Model' 
       'class' => 'Auto\SalonBundle\Entity\Model', 
       'empty_value' => 'Select Model' 
       )) 
       ->add('km') 
       ->add('cc') 
       ->add('hp') 
       ->add('kw') 
     ); 
    } 
} 

为了实现这一点,你必须创建你自己的表单类型和相应的_widget块。或者,您可以使用包https://github.com/shtumi/ShtumiUsefulBundle的依赖过滤表单类型更快地到达那里。

+0

实际上,我最终将一个参数'make'传递给AutoType并使用query_builder加载模型的子集。要实现空列表,最初我传递一个不存在的Make,因此模型列表最初显示为空。只有当选择了制作时,模型列表才会被填充。它有效,暂时我就这样离开它。我会在稍后检查你的建议,并感谢你在这个问题上的努力。 – Bekim