在 CollectionType Admin 中获取父实体 ID
Get parent entity id in CollectionType Admin
我正在创建一个实体 basketElement,它通过 Sonata\Form\Type\CollectionType 实例化管理员链接到父实体 basket。创建实体 basketElement 时,我还需要调用需要实体 ID basketElement.
的服务函数
现在,我有一个管理员:
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());
}
}
如何访问父实体?
我找到了 2 个解决方案;
link_parameters
可以添加到 CollectionType
字段上 add
方法的 fieldDescriptionOptions
参数。在 basketElementAdmin 中,可以从请求对象中检索 link 参数并使用它来检索 linked 实体。
/**
* @param \Sonata\AdminBundle\Form\FormMapper $formMapper
*/
public function configureFormFields(FormMapper $formMapper): void
{
$formMapper->with('basket.group.basketElements')
->add('basketElements', Sonata\Form\Type\CollectionType::class, [], [
'link_parameters' => ['basket_id' => $this->getSubject()->getId()]
])
;
}
}
- 需要parent id的service函数可以在parent admin的
prePersist
和preUpdate
方法中调用设置给childAdmin
我正在创建一个实体 basketElement,它通过 Sonata\Form\Type\CollectionType 实例化管理员链接到父实体 basket。创建实体 basketElement 时,我还需要调用需要实体 ID basketElement.
的服务函数现在,我有一个管理员:
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());
}
}
如何访问父实体?
我找到了 2 个解决方案;
link_parameters
可以添加到CollectionType
字段上add
方法的fieldDescriptionOptions
参数。在 basketElementAdmin 中,可以从请求对象中检索 link 参数并使用它来检索 linked 实体。
/**
* @param \Sonata\AdminBundle\Form\FormMapper $formMapper
*/
public function configureFormFields(FormMapper $formMapper): void
{
$formMapper->with('basket.group.basketElements')
->add('basketElements', Sonata\Form\Type\CollectionType::class, [], [
'link_parameters' => ['basket_id' => $this->getSubject()->getId()]
])
;
}
}
- 需要parent id的service函数可以在parent admin的
prePersist
和preUpdate
方法中调用设置给childAdmin