Sonata 管理包:无法删除与 sonata_type_admin 的关系
Posted
技术标签:
【中文标题】Sonata 管理包:无法删除与 sonata_type_admin 的关系【英文标题】:Sonata admin bundle : unable to remove relation with sonata_type_admin 【发布时间】:2014-03-05 17:25:14 【问题描述】:我有两个具有 OneToOne 关系的实体:Objectif 和 Image。
在奏鸣曲管理包中,我希望能够从目标中删除图像(图像在 formField 中使用 sonata_type_admin 定义。
我可以勾选“删除”复选框,但是当我点击更新按钮时,没有任何变化,图像实体仍然在这里。这是我的代码:
/** objectiveAdmin form field **/
/**
* @param FormMapper $formMapper
*/
protected function configureFormFields(FormMapper $formMapper)
$formMapper
->with("General")
->add('titre')
->add('description')
->with("Icone")
->add('image', 'sonata_type_admin', array(), array('required' => false, 'edit' => 'admin'))
;
/** objective entity class **/
/**
* @ORM\OneToOne(targetEntity="acme\Bundle\Entity\Image" , cascade="persist" , orphanRemoval=true )
*/
private $image;
最后是我的奏鸣曲管理对象页面的捕获:
非常感谢任何答案!
【问题讨论】:
【参考方案1】:我终于通过附加父管理类的preUpdate函数成功地解决了我的问题:
这里是代码:
public function preUpdate($objectif)
// i get the _delete variable of my sonata_type_admin Image widget
$params = $this->getRequest()->request->get($this->getUniqid());
$image = $params['image'];
// if the checkbox is checked i set NULL to my objectif image
if ( isset ( $image['_delete'] ) && !empty ( $image['_delete'] ) )
$objectif->setImage( null ) ;
else
$objectif->setImage($objectif->getImage());
$this->manageEmbeddedImageAdmins($objectif);
// finally , i call my Image remove function to delete the media ...
【讨论】:
感谢您提供有关如何操作的想法【参考方案2】:设置父实体:
/**
* @ORM\OneToOne(targetEntity="NameChildEntity", mappedBy="idForeignKey", cascade="persist", "remove", orphanRemoval=true)
*
*/
private $image;
设置子实体:
/**
* @var \Objective
*
* @ORM\OneToOne(targetEntity="NameParentEntity", inversedBy="image")
* @ORM\JoinColumns(
* @ORM\JoinColumn(name="id_foreign_key", referencedColumnName="id")
* )
*/
private $any_name;
然后运行:
$ php app/console doctrine:generate:entities YourBundle:Objective
$ php app/console doctrine:generate:entities YourBundle:Image
这将在您的实体中创建必要的方法。
【讨论】:
我的图像实体是一个通用实体,其他实体使用它来链接图像,所以我不能使用双向链接:/ 看这篇文章,希望对one to one relation有帮助 抱歉,我不能让它工作......我不知道是否手动检查了 sonata_type_admin 小部件中的删除按钮是否被选中。以上是关于Sonata 管理包:无法删除与 sonata_type_admin 的关系的主要内容,如果未能解决你的问题,请参考以下文章
一个 Symfony 应用程序中的两个 Sonata 管理面板包