我有一个类别表,用树结构构建,使用 Doctrine Tree Extension
它看起来像这样
id parent_id title lft lvl rgt root
864 (NULL) Movies 1 0 18 864
865 864 Packs 2 1 3 864
866 864 Dubbed 4 1 5 864
视觉上是这样的:
Movies
|
|
|->Packs
|->Dubbed
现在我想生成用于添加评论的表单,并将类别加载为每部电影的下拉列表,所以我在我的电影评论表单类型类中
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name');
$builder->add('file');
$builder->add('cover');
$builder->add('category','entity', array('class'=>'Tracker\MembersBundle\Entity\Category', 'property'=>'title', ));
}
它会生成一个正常的下拉菜单,如下所示:
我如何配置我的菜单设置,以便它生成树状下拉选择像这样?
我不确定这是一个好主意:用户将无法输入他们的选择。
尚未测试此解决方案,但它应该有效:
首先,您可以按 root 和 lft 值对这三个进行排序以正确显示它,因此添加一个查询生成器:
'query_builder' => function($er) {
return $er->createQueryBuilder('c')
->orderBy('c.root', 'ASC')
->addOrderBy('c.lft', 'ASC');
},
然后,您需要添加一个getIndentedTitle
您的实体的方法:
public function getIndentedTitle() {
return str_repeat("--", $this->lvl).$this->title;
}
最后,在构建表单时向选项添加一个属性选项,以显示虚拟属性 indentedTitle 而不是 title :
'property' => 'indentedTitle'
See : http://symfony.com/doc/current/reference/forms/types/entity.html http://symfony.com/doc/current/reference/forms/types/entity.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)