Расширения Symfony Doctrine не отображают родительский дочерний список

У меня проблема с представлением списка родитель-потомок в расширениях доктрины symfony gedmo. В моем списке все отображается на одном уровне, и я не знаю, как это исправить. Я пытался использовать datagridvalues для сортировки по lftполю, но это не работает.

Мой category.orm.yml файл

Application\AdminBundle\Entity\Category:
  type: entity
  table: Category
  gedmo:
    tree:
      type: nested
  id:
    id:
      type: integer
      generator:
        strategy: AUTO
  fields:
    name:
      type: string
      length: 255
    image_url:
      type: string
      length: 255  
    slug:
      type: string
      nullable: false
      unique: true

    lft:
      type: integer
      gedmo:
        - treeLeft
    rgt:
      type: integer
      gedmo:
        - treeRight
    root:
      type: integer
      gedmo:
        - treeRoot
    lvl:
      type: integer
      gedmo:
        - treeLevel

  oneToMany:
    children:
      targetEntity: Category
      mappedBy: parent
  manyToOne:
    parent:
      targetEntity: Category
      inversedBy: children
      gedmo:
        - treeParent
      joinColumns:
        Category_id:
          referencedColumnName: id
  lifecycleCallbacks: {  }

И мой метод configureListFields:

protected function configureListFields(ListMapper $listMapper)
{

    $listMapper
    ->add('id')
    ->add('name')
    ->add('slug')
    ;
}

Мое представление списка выглядит как на изображении Список


person woj_jas    schedule 03.11.2016    source источник


Ответы (1)


Я слишком долго с этим боролся ;)

Я нашел в какой-то статье codeproject, что администратор сонаты не поддерживает рендеринг древовидных структур (статья была из 2012 года, поэтому, возможно, что-то изменилось). В любом случае, мое решение очень простое

В моем category.php я добавил

public function __toString()
{
    $prefix = '';
    for ($i=1; $i<= $this->lvl; $i++){
        $prefix .= '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';
    }
    return $prefix . $this->name;
}

public function getLaveledTitle()
{
    return (string)$this;
}

и в CategoryController.php в методе configureListFields я изменил поле name на

    $listMapper
     //if you will not add 'html' as field type `&nbsp` will not be parsed as html
    ->add('laveled_title', 'html', array(
            'strip' => true,
            'label' => 'Category Name'
    ))
    ;   
person woj_jas    schedule 04.11.2016