【问题标题】:Right way to translate collection with A2lix使用 A2lix 翻译集合的正确方法
【发布时间】:2014-02-17 15:59:24
【问题描述】:

我有 2 个实体 CategoryCriteria,类别和标准之间的关系是 OneToMany(双向关系)。如果没有翻译,我在管理表单(CategoryType 和 CriteriaType)等方面没有任何问题。

Category and Criteria 包含一个“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
                        )
                    )

                )
             )

标准类型:

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

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

我不知道如何正确管理这个,你能解释一下吗?谢谢

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

但是因为 'translatable_class' => 'Immo\AnnonceBundle\Entity\Category',即使是 Critera 的诽谤也是 Category 的对象。有什么办法处理吗?谢谢

【问题讨论】:

  • 你得到什么错误?我在你的问题中找不到。
  • 其实我真的不知道怎么用collection和A2lix来管理翻译。当我使用此代码提交表单时,结果不正确,他没有正确处理提交数据。我脑子里有点混乱。

标签: forms symfony collections translation a2lix-translation


【解决方案1】:

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

类别类型:

$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,
        ))

条件类型:

$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.')
                            )
                        )
                    )
                )
            )
         )

【讨论】:

  • 再次感谢,我终于做到了。 :) 为了避免 A2lix 的重复栏,我做了一个特定的处理。
猜你喜欢
  • 1970-01-01
  • 2016-11-30
  • 2016-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-29
  • 2019-11-02
  • 2013-12-26
相关资源
最近更新 更多