Symfony Sonata管理包:无法删除与Sonata_type_admin的关系

Symfony Sonata管理包:无法删除与Sonata_type_admin的关系,symfony,sonata-admin,Symfony,Sonata Admin,我有两个具有一对一关系的实体:Objectif和Image 在sonata admin bundle中,我希望能够从目标中删除图像(图像在formField中定义为sonata_type_admin) 我可以勾选“删除”复选框,但当我单击“更新”按钮时,没有任何更改,图像实体仍在此处。以下是我的代码: /** objectiveAdmin form field **/ /** * @param FormMapper $formMapper */ protected function conf

我有两个具有一对一关系的实体:Objectif和Image

在sonata admin bundle中,我希望能够从目标中删除图像(图像在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;
最后是我的sonata admin objectif页面的截图:

谢谢您的解答!

设置父实体:

/**
* @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

这将在您的实体中创建必要的方法。

我最终通过添加父admin类的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 ...

我的图像实体是一个通用实体,被其他实体用来链接图像,所以我不能使用双向链接:/Read this post,我希望能帮上忙,抱歉,我不能让它工作……我不知道手动检查sonata_type_admin小部件中的delete按钮是否被选中。谢谢你提出的方法