Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony 具有knp原则扩展的i18n格式翻译_Symfony_Doctrine Extensions - Fatal编程技术网

Symfony 具有knp原则扩展的i18n格式翻译

Symfony 具有knp原则扩展的i18n格式翻译,symfony,doctrine-extensions,Symfony,Doctrine Extensions,我正在使用“”转换实体。到目前为止,效果很好。 现在我想有一个通用的解决方案,它适用于任何数量的语言。因此,我考虑使用嵌入式表单(集合)来处理实体的可翻译性。 现在一切都正常工作了,除了添加新翻译时未设置可翻译的_id。有人也尝试过这样做吗? 我只是想知道是否有一种更简单的方法来避免事情过于复杂化 到目前为止,很好,这里是我的类型,这样您可以更好地理解体系结构 // Main type that has a linkTranslationType with the translations cl

我正在使用“”转换实体。到目前为止,效果很好。 现在我想有一个通用的解决方案,它适用于任何数量的语言。因此,我考虑使用嵌入式表单(集合)来处理实体的可翻译性。 现在一切都正常工作了,除了添加新翻译时未设置可翻译的_id。有人也尝试过这样做吗? 我只是想知道是否有一种更简单的方法来避免事情过于复杂化

到目前为止,很好,这里是我的类型,这样您可以更好地理解体系结构

// 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保存现有的翻译链接工作完美
添加一些上下文的其他注释:

1我试过:

$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我发布了一个解决方案,还没来得及尝试,如果有人可以尝试,请投票