Правильный способ перевести коллекцию с A2lix

У меня есть 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() имеет значение true, и у меня есть эта ошибка.

Но из-за 'transurable_class' => 'Immo\AnnonceBundle\Entity\Category' даже клевета Critera является объектом Category. Есть идеи справиться с этим? Спасибо

1 ответ

Решение

Вам необходимо создать соответствующие сущности CategoryTranslation и CriteriaTranslation для ваших текущих сущностей Category и Criteria. И следующее:

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.')
                            )
                        )
                    )
                )
            )
         )
Другие вопросы по тегам