【问题标题】:Sonata admin bundle : unable to remove relation with sonata_type_adminSonata 管理包:无法删除与 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;

最后是我的奏鸣曲管理对象页面的捕获:

非常感谢任何答案!

【问题讨论】:

    标签: symfony sonata-admin


    【解决方案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 小部件中的删除按钮是否被选中。
    猜你喜欢
    • 1970-01-01
    • 2014-04-28
    • 1970-01-01
    • 2012-09-24
    • 2016-07-03
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    • 2015-10-23
    相关资源
    最近更新 更多