Ответ 1
Привет, если вы используете расширения gedmo. Translitable не предназначен для обработки нескольких переводов на запрос. Попробуйте использовать альтернативный вариант knplabs, это лучший вариант для обработки его более общими способами.
У меня есть переводная сущность, использующая переводимое поведение doctrine2.
Я пытаюсь создать форму, которая выглядит так:
| French |English| Spanish |
+--+--------| |---------+------------+
| |
| name: [___my_english_name___] |
| |
| title: [___my_english_title__] |
| |
+------------------------------------------+
Order: [___1___]
Online: (x) Yes
( ) No
Таким образом, в основном существуют атрибуты заказа и онлайн-объекта объекта, которые не являются переводимыми, а также атрибут имени и названия, который имеет переводимое поведение.
В случае, если мой чертеж не ясен: форма содержит 1 вкладку на языковой стандарт, который удерживает поле, которое может быть переведено.
Проблема заключается в том, что по умолчанию Symfony2 связывает форму с сущностью, но переводимое поведение doctrine заставляет меня иметь одну сущность для каждого языка. Лично поведение доктрины прекрасное (и мне оно нравится), но я не могу создать форму, которая позволила бы мне редактировать объект во всей локали - в той же форме.
Пока у меня есть основная форма:
namespace myApp\ProductBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
/**
* Form for the productGroup.
*/
class ProductType extends AbstractType
{
/**
* Decide what field will be present in the form.
*
* @param FormBuilder $builder FormBuilder instance.
* @param array $options Custom options.
*
* @return null;
*/
public function buildForm(FormBuilder $builder, array $options)
{
//Todo: get the available locale from the service.
$arrAvailableLocale = array('en_US', 'en_CA', 'fr_CA', 'es_ES');
//Render a tab for each locale
foreach ($arrAvailableLocale as $locale) {
$builder->add(
'localeTab_' . $locale,
new ProductLocaleType(),
array('property_path' => false, //Do not map the type to an attribute.
));
}
//Uni-locale attributes of the entity.
$builder
->add('isOnline')
->add('sortOrder');
}
/**
* Define the defaults options for the form building process.
*
* @param array $options Custom options.
*
* @return array Options with the defaults values applied.
*/
public function getDefaultOptions(array $options)
{
return array(
'data_class' => 'myApp\ProductBundle\Entity\Product',
);
}
/**
* Define the unique name of the form.
*
* @return string
*/
public function getName()
{
return 'myapp_productbundle_producttype';
}
}
И вкладка:
<?php
namespace MyApp\ProductBundle\Form;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;
use invalidArgumentException;
/**
* Form for the productGroupLocale tabs.
*/
class ProductLocaleType extends AbstractType
{
/**
* Decide what field will be present in the form.
*
* @param FormBuilder $builder FormBuilder instance.
* @param array $options Custom options.
*
* @return null;
*/
public function buildForm(FormBuilder $builder, array $options)
{
$builder->add('name', 'text', array('data' => ???));
$builder->add('title', 'text', array('data' => ???));
}
/**
* Define the defaults options for the form building process.
*
* @param array $options Custom options.
*
* @return array Options with the defaults values applied.
*/
public function getDefaultOptions(array $options)
{
return array(
//'data_class' => 'MyApp\ProductBundle\Entity\Product',
'name' => '',
'title' => '',
);
}
/**
* Define the unique name of the form.
*
* @return string
*/
public function getName()
{
return 'myapp_productbundle_productlocaletype';
}
}
Но, как вы не видите, я понятия не имею, как получить значения имени и названия из переведенной сущности, и я не знаю, как их сохранить после отправки формы.
Привет, если вы используете расширения gedmo. Translitable не предназначен для обработки нескольких переводов на запрос. Попробуйте использовать альтернативный вариант knplabs, это лучший вариант для обработки его более общими способами.
Вам может быть интересно TranslationFormBundle, которые добавляют тип формы для работы с расширением DoctrineTranslatable.
Я проверяю расширение Translator, и даже если это интересно, это не соответствует нашим потребностям. (В основном, все найденные нами примеры требуют, чтобы мы изменили локаль сайта, чтобы редактировать объект в другом языковом языке. Я не знаю китайского языка, и я не хочу, чтобы мой интерфейс был на китайском языке, но у меня есть перевод, который мне нужно скопировать/вставить. Кажется странным объяснять, что, поскольку он действительно является базовым для всех твердых CMS, вы обнаружите, что там, но я выглядел немного сложным, чтобы выполнять эту функцию CMS с помощью Symfony.)
Итак, мы разработали решение и создали BreadGeneratorBundle, который мы решили поделиться: https://github.com/idealtech/BreadGeneratorBundle
Во время публикации этого вопроса он все еще находится в разработке, но его можно использовать как альтернативу CrudGenerator для создания формы для переводческой сущности.
Нам также удается использовать расширение Gedmo - даже если Gediminas сказал, что он не предназначен для обработки множественного перевода;)
Надеюсь, это поможет кому-то!:)