【问题标题】:Symfony2,Doctrine Extensions Tree : Generating a "tree"-like dropdown Select listSymfony2,Doctrine Extensions Tree:生成类似“树”的下拉选择列表
【发布时间】:2012-02-16 10:50:09
【问题描述】:

我有一个类别表,使用树架构构建,使用 Doctrine 树扩展 它看起来像这样

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', ));           
}

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

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

【问题讨论】:

    标签: html forms symfony doctrine-orm


    【解决方案1】:

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

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

    首先,您可以通过根和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 而不是标题:

    'property' => 'indentedTitle'
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-28
      • 1970-01-01
      • 2021-12-06
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多