我正在一个多语言网站上工作,希望用户能够以多种语言创建类别(和其他实体)。
这是我的实体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。
所以,这是我的问题:是否可以允许用户仅使用一种形式输入不同语言的名称和描述?