【问题标题】:Assigning cloned object in SonataAdmin class在 SonataAdmin 类中分配克隆对象
【发布时间】:2013-06-26 13:28:47
【问题描述】:

我想用克隆的 Scenario 对象创建 Game 对象。

Create Game form:
    Name: My game
    Scenario: MyScenario (Combo box)

基于对Deep clone Doctrine entity with related entities 问题的回答,我已经实现了__clone 方法。

我在GameAdmin 类中使用__clone 方法中的prePersist 方法。

public function prePersist($game)
{
    $user = $this->container->get('security.context')->getToken()->getUser();
    $game->setAuthor($user);
    $cp = clone $game->getScenario(); //Error after add this
    $game->setScenario($cp);          //two lines
}

我不确定这是否适合进行此操作,因为我收到了MappingException

The class 'Doctrine\ORM\Persisters\ManyToManyPersister' was not found in the chain 
configured namespaces Sonata\MediaBundle\Entity, FOS\UserBundle\Entity, 
Sonata\UserBundle\Entity, Application\Sonata\MediaBundle\Entity, 
Application\Sonata\UserBundle\Entity, GM\AppBundle\Entity

【问题讨论】:

    标签: php symfony doctrine-orm sonata-admin


    【解决方案1】:

    Scenario 实体中,我有$tasks,即ArrayCollection。我正在克隆整个集合,这会导致问题。

    在循环中克隆每个task 可以解决问题:

    public function __clone()
    {
        if($this->id)
        {
            $this->setId(null);
            $ta = new ArrayCollection();
            foreach($this->tasks as $task)
            {
                $ta[] = clone $task;
            }
            $this->tasks = $ta;
        }
    }
    

    【讨论】:

    • 非常感谢您发布您的解决方案!帮我解决了。 :)
    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 2012-05-06
    • 2014-03-07
    • 2011-02-04
    • 2010-09-18
    • 2020-11-04
    • 2011-07-18
    相关资源
    最近更新 更多