假设我有一个抽象的学说实体类
abstract class BaseClass
{
private $title;
private $description;
}
和两个继承的子类
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 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语句来解决它的唯一方法?
答案 0 :(得分:1)
您可以在$this->getSubject()
中调用configureFormFields
,并根据检查实例有条件地添加字段。
答案 1 :(得分:0)
添加后会添加什么
$form->add('extrafield')
在您的管理课程中?