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的依赖过滤表单类型更快地到达那里。
实际上,我最终将一个参数'make'传递给AutoType并使用query_builder加载模型的子集。要实现空列表,最初我传递一个不存在的Make,因此模型列表最初显示为空。只有当选择了制作时,模型列表才会被填充。它有效,暂时我就这样离开它。我会在稍后检查你的建议,并感谢你在这个问题上的努力。 – Bekim