2016-10-10 8 views
2

Как реализовать группу элементов в раскрывающемся списке ObjectSelect «optgroup_identifier»Как реализовать группу элементов в раскрывающемся списке ObjectSelect

Form\CategoryForm.php

$this->add([ 
    'type' => ObjectSelect::class, 
    'name' => 'category', 
    'options' => [ 
     'label' => 'Категория', 
     'object_manager' => $this->getObjectManager(), 
     'target_class' => Category::class, 
     'property'  => 'name', 
     'optgroup_identifier' => '???', 
     'optgroup_default' => 'Главная', 
     'empty_option' => '== Категория ==', 
     'is_method'  => true, 
     'find_method' => [ 
      'name' => 'findAllChildCategories', 
      'params' => [ 
      ], 
     ], 
    ], 
]); 

Категория Таблица актуальна Self-referencing

Entity\Category.php

/** 
* @var \Doctrine\Common\Collections\Collection 
* 
* @ORM\OneToMany(targetEntity="Application\Entity\Category", mappedBy="parent", cascade={"remove"}) 
*/ 
private $children; 

/** 
* @var \Application\Entity\Category 
* 
* @ORM\ManyToOne(targetEntity="Application\Entity\Category", inversedBy="children") 
* @ORM\JoinColumns({ 
* @ORM\JoinColumn(name="parent", referencedColumnName="id", nullable=true) 
* }) 
*/ 
private $parent; 
Имя

Группа должна быть родительская категория $category->getParent()->getName()

ответ

0

К счастью, в этом случае, Doctrine не делает никаких запросов, чтобы получить группировки; он делает это внутри. optgroup_identifier - это просто имя получателя, которое оно использует для получения имен групп, поэтому получатель может вернуть все, что захотите.

В Entity\Category добавьте метод, предназначенный для возвращаемого родительского имени категории. Убедитесь, что он не совпадает с любыми полями, поэтому Doctrine не возвращает весь объект-прокси в форму. Например:

public function getParentName() { 
    if(!$this->parent) return ''; 
    return $this->parent->getName(); 
} 

Поскольку корневые категории не будут иметь родителя, $this->parent будет null. Посмотрите на этот случай, чтобы избежать сбоя сценария и вернуть пустую строку в качестве обозначения для нее.

Затем введите это имя получателя в optgroup_identifier формы. Конечный результат будет таким же, как на скриншоте с образцовыми данными. enter image description here

+0

Это работает, спасибо !!! – Drakulitka

 Смежные вопросы

  • Нет связанных вопросов^_^