html - Symfony2,学说扩展树 : Generating a "tree"-like dropdown Select list

标签 html forms symfony doctrine-orm

我有一个类别表,使用 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', ));           
}

它生成一个像这样的普通下拉菜单:

enter image description here

我如何配置我的菜单设置,使其生成像这样的树状下拉选择

enter image description here

最佳答案

我不确定这是个好主意:用户将无法输入他们的选择。

尚未测试此解决方案,但它应该可以工作:

首先,您可以按 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'

参见:http://symfony.com/doc/current/reference/forms/types/entity.html

关于html - Symfony2,学说扩展树 : Generating a "tree"-like dropdown Select list,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9309959/

相关文章:

java - 用于文件下载或保存文件的Jsp标签?

python - Django 形式。如何从 initial_text 隐藏冒号?

php - Symfony 2 上的 Endroid/Qrcode 和 __DIR__ const 出现内部服务器错误

Symfony2 测试 : Issue with fixtures and foreign keys

jQuery onclick 切换功能

html - 显示在 div 后面的 Angular Material UI 工具提示

javascript - 从组件外部访问 React 组件方法/状态

ruby-on-rails - Rails 3 提交包含多条记录的表单

php - cakePHP 在没有 session 、序列化或发布的情况下使用发布数据进行分页以获取

Symfony2 自 2.6 以来的翻译问题