如何实现下拉列表中一组元素的ObjectSelect
How to implement a group of elements in the drop-down list ObjectSelect
如何实现下拉列表中的一组元素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' => [
],
],
],
]);
类别 Table 相关 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()
值得庆幸的是,对于这种情况,Doctrine
不会执行任何查询来获取分组;它在内部进行。 optgroup_identifier
只是用于获取组名的 getter 的名称,因此 getter 可以 return 任何你想要的。
在Entity\Category
中添加一个方法,专门用于return获取类别的父名称。确保它不与任何字段重合,因此 Doctrine
不会 return 将整个对象代理到表单中。例如:
public function getParentName() {
if(!$this->parent) return '';
return $this->parent->getName();
}
由于根类别没有父类别,$this->parent
将为 null
。注意这种情况以避免脚本崩溃和 return 空字符串作为它的指定。
然后,将这个getter名字填入表格的optgroup_identifier
。最终结果将如示例数据的屏幕截图所示。
如何实现下拉列表中的一组元素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' => [
],
],
],
]);
类别 Table 相关 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()
值得庆幸的是,对于这种情况,Doctrine
不会执行任何查询来获取分组;它在内部进行。 optgroup_identifier
只是用于获取组名的 getter 的名称,因此 getter 可以 return 任何你想要的。
在Entity\Category
中添加一个方法,专门用于return获取类别的父名称。确保它不与任何字段重合,因此 Doctrine
不会 return 将整个对象代理到表单中。例如:
public function getParentName() {
if(!$this->parent) return '';
return $this->parent->getName();
}
由于根类别没有父类别,$this->parent
将为 null
。注意这种情况以避免脚本崩溃和 return 空字符串作为它的指定。
然后,将这个getter名字填入表格的optgroup_identifier
。最终结果将如示例数据的屏幕截图所示。