告诉我如何在 ObjectSelect ' optgroup_identifier ' 下拉列表中实现元素分组(在表示例中按字段分组)
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' => [
],
],
]);
类别表具有自引用关系
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()
添加一个额外的函数来
Entity\Category专门从$this->parent. 函数名称不能与任何其他字段匹配,这样Doctrine它就不会尝试将整个代理对象插入到表单中。例如:
将此名称粘贴到
optgroup_identifier.Doctrine没有做任何特别神奇的事情,它只是用这个名字调用 getter,这意味着它可以是任何东西。该函数本身会检查是否存在
parent根类别。如果是,返回空文本。结果如图所示。这是正确的方法吗?