Ver Mensaje Individual
  #1 (permalink)  
Antiguo 22/11/2013, 11:32
Makalister
 
Fecha de Ingreso: septiembre-2009
Ubicación: Madrid
Mensajes: 25
Antigüedad: 15 años, 2 meses
Puntos: 0
Traducciones en la BD con Stof Doctrine Extension

Hola Gente,

Acudo ya desesperando despues de mirar mil sitios a ver si a alguien le ha pasado o sabe la solucion a un problema muy estupido.

La inserccion y el guardado de la traducciones me las hace perfectamente. El caso es que cuando obtengo el objeto mediante un find quiero que este venga traducido automaticamente (Se que poniendo un refresh seteando el locale funcionaria) pero no se puede hacer esto automaticamente???

Tengo lo siguiente (Entidad/Documento)

Código PHP:
<?php

namespace MGDExampleBundleDocument
;

use 
DoctrineODMMongoDBMappingAnnotations as ODM;
use 
GedmoMappingAnnotation as Gedmo;
use 
GedmoTranslatableTranslatable;

/**
 * MGD\ExampleBundle\Document\Student
 *
 * @ODM\Document
 * @ODM\ChangeTrackingPolicy("DEFERRED_IMPLICIT")
 */
class Student implements Translatable
{
    
/**
     * @var id $id
     *
     * @ODM\Id(strategy="AUTO")
     */
    
protected $id;

    
/**
     * @var string $name
     *
     * @Gedmo\Translatable
     * @ODM\Field(name="name", type="string")
     */
    
protected $name;

    
/**
     * @var timestamp $birth_date
     *
     * @ODM\Field(name="birth_date", type="timestamp")
     */
    
protected $birth_date;

    
/**
     * @var string $nationality
     *
     * @Gedmo\Translatable
     * @ODM\String
     */
    
protected $nationality;

    
/**
     * Get id
     *
     * @return id $id
     */
    
public function getId()
    {
        return 
$this->id;
    }

    
/**
     * Set name
     *
     * @param string $name
     * @return self
     */
    
public function setName($name)
    {
        
$this->name $name;
        return 
$this;
    }

    
/**
     * Get name
     *
     * @return string $name
     */
    
public function getName()
    {
        return 
$this->name;
    }

    
/**
     * Set birthDate
     *
     * @param timestamp $birthDate
     * @return self
     */
    
public function setBirthDate($birthDate)
    {
        
$this->birth_date $birthDate;
        return 
$this;
    }

    
/**
     * Get birthDate
     *
     * @return timestamp $birthDate
     */
    
public function getBirthDate()
    {
        return 
$this->birth_date;
    }

    
/**
     * Set nationality
     *
     * @param string $nationality
     * @return self
     */
    
public function setNationality($nationality)
    {
        
$this->nationality $nationality;
        return 
$this;
    }

    
/**
     * Get nationality
     *
     * @return string $nationality
     */
    
public function getNationality()
    {
        return 
$this->nationality;
    }

}
He creado un DataFixtures para probar el uso

Código PHP:
<?php

namespace MGDExampleBundleDataFixtures
;

use 
DoctrineCommonDataFixturesFixtureInterface;
use 
DoctrineCommonPersistenceObjectManager;
use 
MGDExampleBundleDocumentStudent;


class 
StudentData implements FixtureInterface
{
    public function 
load(ObjectManager $manager)
    {
        
$student= new Student();

        
$student
            
->setName("Mikel")
            ->
setNationality("English Default")
            ->
setLocale('en')
        ;

        
$manager->persist($student);
        
$manager->flush();

        
$student
            
->setName("Miguel")
            ->
setNationality("Español")
            ->
setLocale('es')
        ;

        
$manager->persist($student);
        
$manager->flush();

        
$student
            
->setName("EaterFrankFurT")
            ->
setNationality("German1en")
            ->
setLocale('de')
        ;

        
$manager->persist($student);
        
$manager->flush();

        
// Or you can use this

        
$repository $manager->getRepository('Gedmo\\Translatable\\Document\\Translation');
        
$student= new Student();

        
$repository
            
->translate($student,'name''es','Pechitos es')
            ->
translate($student,'name''de','DrugenFength de')
            ->
translate($student,'name''en','Nationality en')

            ->
translate($student,'nationality''es','nationality es')
            ->
translate($student,'nationality''de','nationality de')
            ->
translate($student,'nationality''en','nationality en')
        ;

        
$manager->persist($student);
        
$manager->flush();


    }
}


Código PHP:
class DefaultController extends Controller
{
    
/**
     * @Route("/hello/{name}")
     * @Template()
     */
    
public function indexAction($name)
    {
        
/** @var Request $request */
        
$request $this->container->get('request');
        
$request->setLocale('de');

        
/** @var Student $studentReturned */
        
$manager $this->get('doctrine_mongodb')->getManager();
        
$studentReturned=$manager->getRepository("MGDExampleBundle:Student")->find("528f8156d82fcc5425000008");

        
/* Opción que no querria usar

        $studentReturned->setLocale($request->getLocale());
        $manager->refresh($studentReturned);*/

        
$translations=null;

        return array(
'translations' => $translations'student' => $studentReturned );
    }

Un Saludo