使用A2lix翻译集合的正确方法

时间:2014-02-17 15:59:24

标签: forms symfony collections translation a2lix-translation

我有2个实体类别条件,类别和条件之间的关系是OneToMany(双向关系)。没有翻译我管理表单(CategoryType和CriteriaType)等没有任何问题。

类别和标准包含“libelle”属性,我想用英语和其他语言翻译这些属性,所以我有类似的东西:

// Category entity :
 /**
 * @ORM\Column(name="libelle", type="string", length=255)
 * @Gedmo\Translatable
 */
private $libelle; // can't be blank
// other attributes 
// --------

// Criteria entity :
 /**
 * @ORM\Column(name="libelle", type="string", length=255)
 * @Gedmo\Translatable
 */
private $libelle; // can't be blank

但是在这里,我使用GedmoTranslationBundle和A2lix。

这是我的代码:

$builder
        ->add('translations', 'a2lix_translations_gedmo', array(
                    'translatable_class' => 'Immo\AnnonceBundle\Entity\Category',
                    'locales' => array('fr', 'en'),
                    'required' => false,
                    'fields' => array(

                        'libelle' => array(
                            'field_type' => 'text',
                            'locale_options' => array(
                                'en' => array(
                                    'label' => 'Libellé du critère (en) :',
                                    'attr' => array('placeholder' => 'Example : Convenience, proximity, etc.')
                                ),
                                'fr' => array(
                                    'label' => 'Libellé du critère (fr) :',
                                    'attr' => array('placeholder' => 'Exemple : A proximité, commodités, etc.')
                                )
                            )
                        )
                        'criterias' => array(
                            'field_type' => 'collection',
                            'label' => ' ',
                            'type' => new CriteriaType(),
                            'allow_add' => true,
                            'allow_delete' => true
                        )
                    )

                )
             )

CriteriaType:

$builder->add('libelle', 'text', array('libelle' => 'Libellé :'))

上面我的例子,不工作,我没有任何错误信息,似乎$ form-> isValid()返回false,我不知道为什么。

我不知道如何正确管理这个问题,你能否对此有所了解?感谢

编辑: 丢失令牌的第一个错误,现在$ form-> isValid()为真,我有这个错误。

但是因为'translatable_class'=> 'Immo \ AnnonceBundle \ Entity \ Category',即使是Critera的libelle也是Category的对象。有没有想过要处理?感谢

1 个答案:

答案 0 :(得分:2)

您需要为当前的Category和Criteria实体创建相应的CategoryTranslation和CriteriaTranslation实体。接下来:

CategoryType:

$builder
    ->add('translations', 'a2lix_translations_gedmo', array(
                'translatable_class' => 'Immo\AnnonceBundle\Entity\Category',
                'locales' => array('fr', 'en'),
                'required' => false,
                'fields' => array(
                    'libelle' => array(
                        'field_type' => 'text',
                        'locale_options' => array(
                            'en' => array(
                                'label' => 'Libellé de la categorie (en) :',
                                'attr' => array('placeholder' => 'Example : Convenience, proximity, etc.')
                            ),
                            'fr' => array(
                                'label' => 'Libellé de la categorie (fr) :',
                                'attr' => array('placeholder' => 'Exemple : A proximité, commodités, etc.')
                            )
                        )
                    )
                )

            )
         )
        ->add('criteria', 'collection', array(
            'type' => new CriteriaType(),
            'allow_add' => true,
            'allow_delete' => true,
        ))

CriteriaType:

$builder
    ->add('translations', 'a2lix_translations_gedmo', array(
                'translatable_class' => 'Immo\AnnonceBundle\Entity\Criteria',
                'locales' => array('fr', 'en'),
                'required' => false,
                'fields' => array(
                    'libelle' => array(
                        'field_type' => 'text',
                        'locale_options' => array(
                            'en' => array(
                                'label' => 'Libellé du critère (en) :',
                                'attr' => array('placeholder' => 'Example : Convenience, proximity, etc.')
                            ),
                            'fr' => array(
                                'label' => 'Libellé du critère (fr) :',
                                'attr' => array('placeholder' => 'Exemple : A proximité, commodités, etc.')
                            )
                        )
                    )
                )
            )
         )