请问,如何使用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') );
}
答案 0 :(得分:2)
在php中,当您克隆对象时,不会克隆引用。这被称为浅拷贝。您需要做的就是克隆翻译对象。
<?php
foreach ($clonedObject->getTranslations() as $translation) {
$clonedObject->removeTranslation($translation);
$clonedObject->addTranslation(clone $translation);
}