如何使用Sonata和Knp可翻译行为克隆翻译的字段

时间:2017-04-24 16:38:33

标签: symfony doctrine-orm sonata-admin sonata

请问,如何使用Sf3 + SonataAdminBundle和Knp Trabnslatable行为作为翻译策略克隆具有可翻译字段内容的对象。

我已经创建了一个克隆我的对象的自定义动作,所有不可翻译的字段都被克隆并正确插入,除了那些可翻译的字段。

//Custom action to clone the object
public function  cloneAction($id){

    $object = $this->admin->getSubject();

    if( !$object && !is_object( $object ))
    {
        throw new NotFoundHttpException( 'Enable to find the object with the id : '. $id );
    }

    $clonedObject = clone $object;

    $ret = $this->admin->create( $clonedObject );
    $clonedObject->translate()->setTitle( $object->translate()->getTitle(). ' (Cloned)' );

    $this->addFlash( 'sonata_flash_success', 'Cloned successfully' );

    return new RedirectResponse( $this->admin->generateUrl('list') );
}

1 个答案:

答案 0 :(得分:2)

在php中,当您克隆对象时,不会克隆引用。这被称为浅拷贝。您需要做的就是克隆翻译对象。

<?php
foreach ($clonedObject->getTranslations() as $translation) {
    $clonedObject->removeTranslation($translation);
    $clonedObject->addTranslation(clone $translation);
}