symfony - 在 CollectionType Admin 中获取父实体 ID
问题描述
我正在创建一个实体basketElement ,它通过 Sonata\Form\Type\CollectionType 实例化管理员链接到父实体篮。在创建实体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)
;
}
}
篮子元素字段管理员如下:
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
可以添加到字段上的方法的fieldDescriptionOptions
参数中。比在 basketElementAdmin 中可以从请求对象中检索链接参数并使用它来检索链接实体。add
CollectionType
/**
* @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()]
])
;
}
}
- 需要父id的服务功能可以在父admin的
prePersist
and方法中调用并设置给childAdminpreUpdate
推荐阅读
- javascript - 通过点击从 React 组件渲染到另一个组件
- javascript - 长时间空闲后 Firefox 不会触发 window.onfocus 事件
- javascript - 平均堆栈:如何使用 nodejs expressjs 和 angular 6 将图像存储在 mongodb 中?
- python - 基于旧的张量创建一个新的张量
- c# - 如何从在该对象的方法代码中启动的 BackgroundWorker 正确更新对象的属性?
- php - 根据身高和体重检测表格中的变化
- java - 作家不写文件,但只创建它
- git - 我需要从 Bitbucket Git repo 签出标签的单个文件夹
- ios - 通用链接仅打开基本 URL
- jquery - Flatpickr:添加下拉菜单以更改年份