【发布时间】:2019-08-01 11:57:48
【问题描述】:
我正在创建一个实体 basketElement,它通过 Sonata\Form\Type\CollectionType 实例化管理员链接到父实体 basket。在创建实体 basketElement 时,我还需要调用需要实体 basket 的 id 的服务函数。
现在,我有一个管理员:
class BasketAdmin extends AbstractAdmin {
/**
* @param \Sonata\AdminBundle\Form\FormMapper $formMapper
*/
public function configureFormFields(FormMapper $formMapper): void
{
$formMapper->with('basket.group.basketElements')
->add('basketElements', Sonata\Form\Type\CollectionType::class)
;
}
}
basketElements 字段 admin 如下:
class BasketElementAdmin extends AbstractAdmin {
/**
* @param \Sonata\AdminBundle\Form\FormMapper $formMapper
*/
public function configureFormFields(FormMapper $formMapper): void
{
$formMapper->with('basketElement.group.products')
->add('basket', Sonata\AdminBundle\Form\Type\ModelHiddenType::class)
;
}
public function prePersist(){
$this->myService->myFunction($this->getParent()->getSubject()->getId());
}
}
如何访问父实体?
【问题讨论】:
-
id是自动生成的并且在实体类中没有设置方法吗? -
它是自动生成的。我可以使用父母的 getSubject 但我猜有一个错误,与github.com/sonata-project/SonataAdminBundle/issues/3747
-
如果它是自动生成的,那么它没有 setter 方法。然后它在形式上什么也没有丢失。你到底想达到什么目的?
-
在创建
basketElement时,我还需要调用需要父basket实体的服务。如果我理解正确,这应该在basketElementAdmin中使用getParent来完成,但getParent总是返回null。在我看来,BasketAdmin和BasketElementAdmin之间没有联系。加载BasketElementAdmin的url 仅包含uniqid和puniqid但puniqid未在php 代码中使用。 -
这是经典的XY problem。请将该信息添加到您的问题中,解释您实际想要实现的目标,添加所有其他相关代码,例如服务。最终你的问题可以用另一种方法来解决,也许使用
prePersistlifecycleCallback。
标签: symfony symfony4 sonata-admin sonata