我正在尝试获取和操作与 SonataAdmin 中的 ImageAdmin 类相关的实际对象(使用 Symfony 2.3)。当 ImageAdmin 类是唯一被使用的类时,这可以正常工作。但是当 ImageAdmin 被嵌入到另一个 Admin 中时,它就出现了可怕的错误。
当您没有嵌入式管理员时,以下是有效的:
class ImageAdmin extends Admin {
protected $baseRoutePattern = 'image';
protected function configureFormFields(FormMapper $formMapper) {
$subject = $this->getSubject();
}
}
但是,当您使用以下方法将 ImageAdmin 嵌入 ParentAdmin 时:
class PageAdmin extends Admin {
protected function configureFormFields(FormMapper $formMapper) {
$formMapper->add('image1', 'sonata_type_admin');
}
}
然后,当您编辑 ID 为 10 的父项并在 ImageAdmin 中调用 getSubject() 时,您将获得 ID 为 10 的图像!
换句话说,getSubject() 从 URL 中提取 id 然后调用$this->getModelManager()->find($this->getClass(), $id);
,它交叉引用 Parent id 和 Image id。哎呀!
所以......我想要做的是能够掌握在当前 ImageAdmin 实例中正在渲染/编辑的实际对象,无论是直接编辑还是通过嵌入式表单进行编辑,然后能够使用它。
也许 getSubject() 是错误的树,但我注意到$this->getCurrentChild()
当从 ImageAdmin::configureFormFields() 调用时返回 false,即使 ImageAdmin 是使用 sonata_type_admin 字段类型嵌入的。我很困惑...
无论如何,我希望有可能以某种我忽略的明显方式来获取该对象,并且这里有人可以帮助启发我!