Правильный способ перевести коллекцию с 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.')
)
)
)
)
)
)