Symfony 具有knp原则扩展的i18n格式翻译
我正在使用“”转换实体。到目前为止,效果很好。 现在我想有一个通用的解决方案,它适用于任何数量的语言。因此,我考虑使用嵌入式表单(集合)来处理实体的可翻译性。 现在一切都正常工作了,除了添加新翻译时未设置可翻译的_id。有人也尝试过这样做吗? 我只是想知道是否有一种更简单的方法来避免事情过于复杂化 到目前为止,很好,这里是我的类型,这样您可以更好地理解体系结构Symfony 具有knp原则扩展的i18n格式翻译,symfony,doctrine-extensions,Symfony,Doctrine Extensions,我正在使用“”转换实体。到目前为止,效果很好。 现在我想有一个通用的解决方案,它适用于任何数量的语言。因此,我考虑使用嵌入式表单(集合)来处理实体的可翻译性。 现在一切都正常工作了,除了添加新翻译时未设置可翻译的_id。有人也尝试过这样做吗? 我只是想知道是否有一种更简单的方法来避免事情过于复杂化 到目前为止,很好,这里是我的类型,这样您可以更好地理解体系结构 // Main type that has a linkTranslationType with the translations cl
// Main type that has a linkTranslationType with the translations
class linkType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('name', 'text', array(
'label' => 'Name'
))
->add('translations', 'collection', array(
'type' => new linkTranslationType(),
'label' => false,
'allow_add' => true,
'allow_delete' => true
));
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyBundle\Entity\Link'
));
}
}
这是按语言呈现为“一行”的LinkTranslationType:
en_en Anchor http//url/en
class linkTranslationType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('locale', 'text',array(
'label' => 'Anchor'
))
->add('linkText', 'text',array(
'label' => 'Anchor'
))
->add('linkUrl', 'text', array(
'label' => 'Url'
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyBundle\Entity\LinkTranslation'
));
}
}
例如,尝试添加此新条目:
en_en Anchor http//url/en
class linkTranslationType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('locale', 'text',array(
'label' => 'Anchor'
))
->add('linkText', 'text',array(
'label' => 'Anchor'
))
->add('linkUrl', 'text', array(
'label' => 'Url'
))
;
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'MyBundle\Entity\LinkTranslation'
));
}
}
我得到:
id translatable_id linkText linkUrl locale
7 NULL Anchor http//url/en en_EN
我试图发现可翻译id是如何工作的,但仍然没有时间检查整个源代码。最后,我也尝试设置TranslateableID,但运气不好。(更新:评论中)
到目前为止,我可以:
- #1插入一个新链接,但不插入翻译(它们以NULL保存为traslatable_id)
- #2保存现有的翻译链接工作完美
$link = new Link();
if ($form->isValid() ) {
$link->mergeNewTranslations(); // but this also does assigm the Id to the translations
}
2要保存现有翻译,我刚刚将现有链接实体传递给表单生成器
3我知道我可以循环并将可翻译元素分配给父实体
但如果我有更好的选择,我不愿意这么做:
// persist($link); and flush()
foreach ($link->getTranslations() as $linkTranslation) {
$linkTranslation->setTranslatable($link);
$em->persist($linkTranslation);
}
$em->flush();
当然这不是我想要的答案:)你应该在
翻译字段中添加一个'by_reference'=>false
选项,然后在你的链接中添加这些方法(参见)
在仔细查看源代码:doctor bahaviors/src/Model/translateable/TranslationMethods之后,现在我知道在linkTranslationType中添加一个“translateable”(类型:entity)可以设置translation_id。但是表单集合有点麻烦等等。我需要找到一些更简单的配置。因此,如果有人以不同的方式实现了这一点,请让我知道。嗨!我有一个类似的问题,我也不知道如何处理它。我尝试了您的解决方案,但出现了以下错误:属性“translations”或方法“getTranslations()”、“translations()”、“isTranslations()”、“hasTranslations()”、“\uu get()”都不存在,并且在类“SocialCar\CoreBundle\Entity\Accessority”中具有公共访问权限。您好,我已经为symfony 3尝试了此解决方案。我遵循了这个参考url的指示。错误如下:属性“translations”或方法“getTranslations()”、“translations()”、“isTranslations()”、“hasTranslations()”、“uu get()”中的任何一个都不存在,并且在类“class_PATH”中都没有公共访问权限。。如果你有解决办法,请告诉我。我已经创建了两个实体ContentPages和ContentPagesTranslations。我知道这有点老套,但你可以从这里借用,并根据你的需要进行调整。快乐编码@petekaner我发布了一个解决方案,还没来得及尝试,如果有人可以尝试,请投票