Doctrine Annotations Exception - 奇怪的错误

时间:2014-08-09 18:13:28

标签: php symfony doctrine-orm

当我尝试生成实体或更新架构时;

[学说\共同\注解\ AnnotationException]
[语义错误]从未导入类Gedmo \ Translatable \ Entity \ Translation中的注释“@index”。您是否忘记为此注释添加“使用”语句?

有什么问题?

我试过了;

  • 清除缓存
  • 清除学说缓存,
  • Chmod,
  • 乔恩,
  • 作曲家更新

更多信息:

我现在不使用gedmo翻译。它已安装但未使用!

我没有使用翻译注释。

将symfony2.4更新为2.6后发生这种情况。

2 个答案:

答案 0 :(得分:6)

这是一个错误

不幸的是,Gedmo\Translatable\Entity\Translation的类doc-block包含注释@index(而不是@Index,有一个大写" I")。这可能会导致区分大小写的文件系统出现问题。

这已在提交1926773: Removed unused use statements and added a missing one中修复,但尚未标记/发布。

因为您升级了Symfony,所以您可能还升级了Doctrine。我不确定发生了哪种版本的Doctrine,但过去遗漏的注释只是被忽略了。如今抛出异常。这可能是您在升级后遇到此问题的原因。

禁用缺少注释异常

一种解决方案是忽略@index(小写" i")注释:

AnnotationReader::addGlobalIgnoredName('index');

文档:2.2.3. Ignoring missing exceptions

或者完全禁用导入验证机制:

$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reader->setEnabledPhpImports(false);

文档:2.2.4. PHP Imports

请注意,在将来的Doctrine版本中将删除最后一个功能。

禁用可翻译映射

即使您没有使用可翻译扩展程序,也可能启用了映射。 否则,课程将无法加载,错误也不会发生。

app/config/config.yml

中搜索此类内容
doctrine:
  orm:
    entity_managers:
      default:
        mappings:
          gedmo_translatable:
            type: annotation
            prefix: Gedmo\Translatable\Entity
            dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translatable/Entity"
            alias: GedmoTranslatable
            is_bundle: false
          gedmo_translator:
            type: annotation
            prefix: Gedmo\Translator\Entity
            dir: "%kernel.root_dir%/../vendor/gedmo/doctrine-extensions/lib/Gedmo/Translator/Entity"
            alias: GedmoTranslator
            is_bundle: false

您应包含您实际使用的扩展程序的映射。

升级gedmo / doctrine-extensions

gedmo/doctrine-extensionscomposer.json的要求更改为至少1926773.您还可以要求维护者发布包含错误修复的新版本。

答案 1 :(得分:3)

尝试在翻译实体的顶部添加use Doctrine\ORM\Mapping\Index;

相关问题