可翻译的实体和多个翻译的形式

时间:2012-04-17 20:50:12

标签: symfony doctrine-orm

http://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/translatable.md#personal-translations

考虑Category实体及其CategoryTranslation实体

我想创建一个可以轻松添加翻译的表单。

我有一个有用的功能解决方案,因为它对TranslationType有部分通用性。 但它仅限于更新..( - >抽象类使用)

class TranslationType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('locale')
            ->add('field')
            ->add('content')
        ;
    }

    public function getDefaultOptions()
    {
        return array(
            'data_class' => 'Gedmo\Translatable\Entity\MappedSuperclass\AbstractPersonalTranslation'
        );
    }

    public function getName()
    {
        return 'translation';
    }
}

class CategoryType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('description')
            ->add('translations', 'collection', array(
                'type' => new TranslationType()
            ))
        ;
    }

    public function getDefaultOptions()
    {
        return array(
            'data_class' => 'Category'
        );
    }

    public function getName()
    {
        return 'categ';
    }
}

你看到了解决方案吗?

感谢。

2 个答案:

答案 0 :(得分:2)

答案:

class CategoryType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('title')
            ->add('description')
            ->add('translations', 'collection', array(
                'type' => new TranslationType(),
                'allow_add' => true,
                'by_reference' => false,
                'options' => array(
                    'data_class' => 'XXX\YYYBundle\Entity\CategoryTranslation'
                )
            ))
        ;
    }

    public function getDefaultOptions()
    {
        return array(
            'data_class' => 'XXX\YYYBundle\Entity\Category'
        );
    }

    public function getName()
    {
        return 'categ';
    }
}

我制作了专用的捆绑https://github.com/a2lix/TranslationFormBundle以便于使用。

答案 1 :(得分:0)

你必须写一些技巧。

这是我的解决方案的一部分(适用于SonataAdminBundle),https://gist.github.com/2116290 但我还没有设法让它工作。它真的可以帮助你。

如果你找到了什么,请告诉我。