如何使用一种形式输入实体翻译(使用Gedmo \ Translatable使用Symfony)

时间:2019-07-05 12:45:41

标签: php forms translation symfony4

我正在一个多语言网站上工作,希望用户能够以多种语言创建类别(和其他实体)。

这是我的实体Category的摘录:

PHP

<?php
/**
 * @ORM\Entity(repositoryClass="App\Repository\CategoryRepository")
 */
class Category implements Translatable
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @Gedmo\Translatable
     * @ORM\Column(type="string", length=255)
     */
    private $name;

    /**
     * @Gedmo\Translatable
     * @ORM\Column(type="text", nullable=true)
     */
    private $description;    

    // ... getters and setters ...

}
?>

Gedmo使用以下结构将我所有实体的所有翻译存储在一个表中:

--------------------------------------------------------------
| id | locale | object_class | field | foreign_key | content |
--------------------------------------------------------------

object_class 指的是实体类(例如:App \ Entity \ Category), foreign_key 指的是当前翻译的实体。

实际上,翻译会根据url中的当前语言环境很好地显示,并且当用户更改语言时内容会自动调整。

用户还可以添加一些类别,这是我的CategoryType:

<?php
class CategoryType extends AbstractType
{

    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('name', TextType::class, [
                'attr' => [
                    'placeholder' => 'Category name'
                ],
                'label' => 'Category name',
            ])
            ->add('description', TextareaType::class, [
                    'required' => false,
                    'attr' => [
                        'placeholder' => 'Category description',
                    ],
                    'label' => 'Category description',
                ]
            )

            ->add('send', SubmitType::class, [
                'label' => 'Send'
            ])
            ->add('image', FileType::class, [
                'label' => 'Illustration',
                "mapped" => false,
                "required" =>false,
            ]);
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Category::class,
        ]);
    }
}?>

问题是:添加新类别时,名称和描述仅针对当前语言环境设置。当我们要为给定的语言环境更新类别时,用户必须转到表单,但要使用他要为其修改类别的语言环境。

这是功能,但并非十分简单。

我尝试了a2lix bundle,但是最新版本不再与Gedmo兼容,并且我想避免使用Entity的所有可翻译字段创建EntityTranslation。

所以,这是我的问题:是否可以允许用户仅使用一种形式输入不同语言的名称和描述?

0 个答案:

没有答案