为多个实体创建一个总管理员,但在编辑时调用特定管理员
Create one general admin for multiple entities but call particular admin on edit
假设我有一个抽象的学说实体class
abstract class BaseClass
{
private $title;
private $description;
}
和两个继承childclasses
class A extends BaseClass
{
}
还有一个额外的字段
class B extends BaseClass
{
private $extraField;
...
}
对于这两个实体,我想创建一个管理员,以便在一个视图中同时列出这两个实体。所以在我的 admin.yml 中添加
AppBundle\Admin\BaseClassAdmin:
tags:
- { name: sonata.admin, manager_type: orm, label: "base" }
arguments:
- null
- AppBundle\Entity\BaseClass
-
calls:
- [setSubClasses, [{'A' : 'AppBundle\Entity\A', 'B' : 'AppBundle\Entity\B'}]]
而 BaseClass Admin class 是
class BaseClassAdmin extends AbstractAdmin
{
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title');
}
protected function configureFormFields(FormMapper $form)
{
$form->add('title');
$form->add('description');
}
}
我想要做的是列表视图显示这两种类型,这不是问题。但是当我点击一个类型为 B 的项目时,我想在我的表单中显示 extraField。但事实并非如此。
这是因为 B 调用了特定的管理员(在表单中添加了 extraField),它只调用了一般管理员 (BaseClassAdmin)。
所以我的问题
有没有办法从列表视图中调用对应于实体类型的特定管理员?还是只能修改BaseClassAdmin,在form方法中添加难看的if-statements解决?
如果添加
会怎样
$form->add('extrafield')
在您的管理员中 class ?
您可以在 configureFormFields
中调用 $this->getSubject()
,并根据 instanceof 检查有条件地添加字段。
假设我有一个抽象的学说实体class
abstract class BaseClass
{
private $title;
private $description;
}
和两个继承childclasses
class A extends BaseClass
{
}
还有一个额外的字段
class B extends BaseClass
{
private $extraField;
...
}
对于这两个实体,我想创建一个管理员,以便在一个视图中同时列出这两个实体。所以在我的 admin.yml 中添加
AppBundle\Admin\BaseClassAdmin:
tags:
- { name: sonata.admin, manager_type: orm, label: "base" }
arguments:
- null
- AppBundle\Entity\BaseClass
-
calls:
- [setSubClasses, [{'A' : 'AppBundle\Entity\A', 'B' : 'AppBundle\Entity\B'}]]
而 BaseClass Admin class 是
class BaseClassAdmin extends AbstractAdmin
{
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('title');
}
protected function configureFormFields(FormMapper $form)
{
$form->add('title');
$form->add('description');
}
}
我想要做的是列表视图显示这两种类型,这不是问题。但是当我点击一个类型为 B 的项目时,我想在我的表单中显示 extraField。但事实并非如此。
这是因为 B 调用了特定的管理员(在表单中添加了 extraField),它只调用了一般管理员 (BaseClassAdmin)。
所以我的问题
有没有办法从列表视图中调用对应于实体类型的特定管理员?还是只能修改BaseClassAdmin,在form方法中添加难看的if-statements解决?
如果添加
会怎样$form->add('extrafield')
在您的管理员中 class ?
您可以在 configureFormFields
中调用 $this->getSubject()
,并根据 instanceof 检查有条件地添加字段。