2014-08-28 2 views
0

Я работаю в Symfony 2.5Symfony2 формы перевод с a2lix_translations и Gedmo доктрины-расширений

  • gedmo/доктрина-расширения ": "DEV-мастер
  • a2lix/перевод форм-расслоение":" 2. * @ dev

Я пытаюсь добавить перевод на свою сущность Collection с именем и описанием значений.

Вот моя коллекция сущность:

/** 
* Collection 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="Angeli\AdminBundle\Entity\CollectionRepository") 
* @Gedmo\TranslationEntity(class="Angeli\AdminBundle\Entity\CollectionTranslation") 
*/ 
class Collection 
{ 
* @var integer 
* 
* @ORM\Column(name="id", type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
private $id; 

/** 
* @var string 
* 
* @Gedmo\Translatable 
* @ORM\Column(name="name", type="string", length=255) 
*/ 
private $name; 

/** 
* @var string 
* 
* @Gedmo\Translatable 
* @ORM\Column(name="description", type="text") 
*/ 
private $description; 

/** 
* @ORM\OneToMany(targetEntity="CollectionTranslation", mappedBy="object", cascade={"persist", "remove"}) 
*/ 
protected $translations; 

/** 
* Required for Translatable behaviour 
* @Gedmo\Locale 
*/ 
protected $locale; 

public function __construct() 
{ 
    $this->translations = new ArrayCollection(); 
} 

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

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

    return $this; 
} 

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

/** 
* Set description 
* 
* @param string $description 
* @return Collection 
*/ 
public function setDescription($description) 
{ 
    $this->description = $description; 

    return $this; 
} 

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

public function getTranslations() 
{ 
    return $this->translations; 
} 

public function addTranslation(CollectionTranslation $t) 
{ 
    $this->translations->add($t); 
    $t->setObject($this); 
} 

public function removeTranslation(CollectionTranslation $t) 
{ 
    $this->translations->removeElement($t); 
} 

public function setTranslations($translations) 
{ 
    $this->translations = $translations; 
} 

public function __toString() 
{ 
    return $this->getName(); 
} 
} 

Вот мой CollectionTranslation Класс:

/** 
* @ORM\Entity 
* @ORM\Table(name="collection_translations", 
*  uniqueConstraints={@ORM\UniqueConstraint(name="lookup_unique_idx", columns={ 
*   "locale", "object_id", "field" 
*  })} 
*) 
*/ 
class CollectionTranslation extends AbstractPersonalTranslation 
{ 
    /** 
    * Convinient constructor 
    * 
    * @param string $locale 
    * @param string $field 
    * @param string $content 
    */ 
    public function __construct($locale = null, $field = null, $content = null) 
    { 
     $this->setLocale($locale); 
     $this->setField($field); 
     $this->setContent($content); 
    } 

    /** 
    * @ORM\ManyToOne(targetEntity="Collection", inversedBy="translations") 
    * @ORM\JoinColumn(name="object_id", referencedColumnName="id", onDelete="CASCADE") 
    */ 
    protected $object; 
} 

Теперь я пытаюсь по созданию формы:

class CollectionType extends AbstractType{ 

public function buildForm(FormBuilderInterface $builder, array $options) 
{ 
    //$builder->add('name','text', array('required' => true, 'label'=>'Name')); 
    //$builder->add('description','textarea', array('required' => true, 'label'=>'Description')); 
    $builder->add('translations', 'a2lix_translations'); 


} 

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    $resolver->setDefaults(array(
     'data_class' => 'Angeli\AdminBundle\Entity\Collection', 
    )); 
} 

public function getName() 
{ 
    return 'Collection'; 
} 

} 

Но моя форма существует 3 языковых вклада и поля ввода

  • поле
  • Содержание

Если добавить

  • поле = имя
  • содержание = некоторый текст

Я только перевел значение "имя"

Мне нужна форма с языковыми языками и «именем» и «описанием» в качестве полей ввода в форме перевода.

Кто-то видит, что я делаю неправильно?

ответ

0

Попробуйте следующее: напр. вы используете 3 языка на английском, французском и немецком языках.

Добавить в форму:

$builder->add('translations', 'a2lix_translations', array(
     'locales' => array('en_US','fr_FR', 'de'), 
     'required_locales'=>array('en_US'), 
     'fields' => array(
      'name' => array(
       'field_type' => 'text', 
       'label' => 'Name',      
       'locale_options' => array(
        'fr' => array(
         'label' => 'nom' 
        ), 
        'de' => array(
         'label' => 'Name' 
       ), 
       )), 
      'description' => array(
       'field_type' => 'textarea', 
       'label' => 'Description',      
       'locale_options' => array(
        'fr' => array(
         'label' => 'description' 
       ), 
        'de' => array(
         'label' => 'Beschreibung' 
       ), 
      )), 
      ))); 

И делают в виду как

form_label(form.translations) 

form_widget(form.translations) 
0

У меня была такая же проблема, как ваша. Пожалуйста, попробуйте:

"gedmo/doctrine-extensions": "dev-master", 
"a2lix/translation-form-bundle": "1.*@dev" 

и

$builder->add('translations', 'a2lix_translations_gedmo', array(
    'translatable_class' => 'Angeli\AdminBundle\Entity\Collection', 
)); 

Вам также не нужно __construct в CollectionTranslation.

Смежные вопросы