使用YAML使用Symfony2配置可翻译的Doctrine2扩展



在简而言之

我正在编写Symfony2/Doctrine2应用程序,并已安装和配置了使用YAML的StofDoctrineExtensionsBundle提供的可翻译扩展名,但是没有生成其他翻译表(S),并且在尝试与已尝试与已尝试使用的实体一起工作时会引发以下例外可翻译的属性:

未找到名为'/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/gedmo/gedmo/translatable/entity/translation/translation.orm.yml'for类''。

更详细地

我正在尝试在我的Symfony2/Doctrine2应用程序中使用可翻译的扩展名,该应用程序由StofDoctrineExtensionsBundle提供,但是我可以找到的大多数可用文档主要针对配置注释的使用情况,但是yaml,因为那是我配置其他所有内容的方式。

我的配置

我已将以下内容添加到我的 composer.json文件中,并运行了 composer update命令: "stof/doctrine-extensions-bundle": "dev-master",捆绑包在我的 app/AppKernel.php文件中注册。

我的app/config/config.yml文件具有以下配置:

doctrine:
  orm:
    auto_generate_proxy_classes: %kernel.debug%
      auto_mapping: true        
      mappings:
        gedmo_translatable:
          type: yml
          prefix: GedmoTranslatableEntity
          dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
          alias: GedmoTranslatable
          is_bundle: false
stof_doctrine_extensions:
  default_locale: en_GB
  translation_fallback: true
  orm:
    default:
      timestampable: true
      translatable: true

然后,我在yaml中定义了一个实体:

FooContentBundleEntityArticle:
  type: entity
  repositoryClass: FooContentBundleRepositoryArticleRepository
  table: article
  gedmo:
    translation:
      locale: locale
  id:
    id:
      type: integer
      generator: { strategy: AUTO }
  fields:
    name:
      type: string
      length: 64
      gedmo:
        - translatable
    content:
      type: text
      gedmo:
        - translatable
    # ... #
  oneToMany:
    # ... #

我已经运行了控制台命令php app/console doctrine:generate:entities FooContentBundle生成实体类,并手动添加了Locale属性和设置器:

class Article
{
    /* ... */
    private $locale;
    public function setTranslatableLocale($locale)
    {
        $this->locale = $locale;
    }
    /* ... */
}

运行php app/console doctrine:schema:update --force后,我的文章表及其关联创建,但与翻译有关(我假设应该为此创建一个表...)

然后,在与可翻译的实体一起工作时,我会得到例外:

未找到名为'/var/www/my-project/vendor/gedmo/doctrine-extensions/lib/gedmo/gedmo/translatable/entity/translation/translation.orm.yml'for类''。

例外是在它在其中寻找的路径中不存在的yaml文件,我也无法在其他任何地方找到它。

有人对我要出错的地方有任何想法吗?

更新:经过进一步调查...

运行php app/console doctrine:mapping:info显示我的所有实体,而与翻译无关,但是,如果我更新app/config/config.yml文件的gedmo_translatable:部分,然后将type: yml更改为type: annotation,然后再次运行该命令,我将列出以下列出:

>
[OK]   GedmoTranslatableEntityMappedSuperclassAbstractTranslation
[OK]   GedmoTranslatableEntityTranslation
[OK]   GedmoTranslatableEntityMappedSuperclassAbstractPersonalTranslation

在此时,我可以更新我的模式,并且有一个新的ext_translations表。但是,与我的实体合作时,没有什么都没有插入其中,大概是因为它现在期望通过注释而不是yaml进行配置,所以将我的配置更改回type: yml开始再次抛出异常,如预期。

尝试了文档表明无法正常工作的事情,即在同一捆绑包中混合注释和yaml配置后,看来我有工作。整个事情感觉就像一个错误或不完整的实现,但是我可能会错误地做某事。这是工作...

app/config/config.yml中设置以下内容:doctrine.orm.mappings.gedmo_translatable.type: annotation

在我的yaml架构定义中设置可翻译的配置,如我最初的问题以及作为我的类文件中的注释:

/* ... */
use GedmoMappingAnnotation as Gedmo;
/* ... */
class Article
{
    /* ... */
    /**
     * @GedmoTranslatable
     * @var string $name
     */
    private $name;
    /**
     * @GedmoLocale
     */
    private $locale;
    public function setTranslatableLocale($locale)
    {
        $this->locale = $locale;
    }
    /* ... */
}

执行此操作后,将创建附加表,并在坚持实体时将翻译插入其中。

相关内容

  • 没有找到相关文章

最新更新