为多个实体创建一个通用管理员,但在编辑时调用特定管理员



假设我有一个抽象的条令实体类

abstract class BaseClass
{
private $title;
private $description;
}

和两个继承的子类

class A extends BaseClass
{
}

和一个额外的现场

class B extends BaseClass
{
private $extraField;
...
}

对于这两个实体,我想创建一个管理员,以便在一个视图中将两者一起列出。所以在我的管理员yml中,我添加了

AppBundleAdminBaseClassAdmin:
tags:
- { name: sonata.admin, manager_type: orm, label: "base" }
arguments:
- null
- AppBundleEntityBaseClass
-
calls:
- [setSubClasses, [{'A' : 'AppBundleEntityA', 'B' : 'AppBundleEntityB'}]]

BaseClass Admin类是

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语句来解决它的唯一方法?

您可以在configureFormFields中调用$this->getSubject(),并根据instanceof check有条件地添加字段。

https://symfony.com/doc/master/bundles/SonataAdminBundle/reference/advanced_configuration.html#inherited-类

如果添加,会附加什么

$form->add('extrafield')

在你的管理课上?

最新更新