【问题标题】:Doctrine 2.0 ReflectionException when I try to do YAML Mapping当我尝试进行 YAML 映射时出现 Doctrine 2.0 ReflectionException
【发布时间】:2011-06-19 03:39:33
【问题描述】:

我的 cli-config.php 中有这段代码:

 $driverImpl = new \Doctrine\ORM\Mapping\Driver\YamlDriver(array(__DIR__.'/yaml'));
 $driverImpl->setFileExtension('.yml');
 $config->setMetadataDriverImpl($driverImpl);

./yaml 中有 yml 文件(Client.yml,Worker.yml,Company.yml)

当我运行文件以在 db 中生成带有此指令的架构时:

php doctrine orm:schema-tool:create

抛出:

PHP Warning:  class_parents(): Class Client does not exist and could not be loaded in applicationPath\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222

Warning: class_parents(): Class Cliente does not exist and could not be loaded in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
PHP Warning:  array_reverse() expects parameter 1 to be array, boolean given in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222

Warning: array_reverse() expects parameter 1 to be array, boolean given in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222
PHP Warning:  Invalid argument supplied for foreach() in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222

Warning: Invalid argument supplied for foreach() in applicationPath\\system\application\libraries\Doctrine\ORM\Mapping\ClassMetadataFactory.php on line 222



  [ReflectionException]
  Class Client does not exist

和Doctrine文档http://www.doctrine-project.org/docs/orm/2.0/en/reference/yaml-mapping.html一样

我不知道为什么会这样,知道吗? 谢谢

【问题讨论】:

  • 我注意到第一个警告说“Class Client 不存在..”,而第二个警告说“Class Cliente 不存在..”。你确定你的类名没有错别字吗?

标签: php orm doctrine yaml doctrine-orm


【解决方案1】:

IIRC,SchemaTool 将基于 ClassMetadata 实例生成 SQL,而不是直接从您的 YAML 映射中生成。 ClassMetadata 实例也需要您的实际实体类

确保您的命令行工具已加载/自动加载所有实体类。

【讨论】:

  • 好吧,我不知道该怎么做。你能给我举个例子吗?
  • 您能否进一步描述您的意思“确保您的命令行工具已加载所有实体类?
【解决方案2】:

我遇到了同样的麻烦。诀窍是从 yaml 文件中生成实体,并将 --generate-annotations 选项设置为 1。我复制了下面使用的命令:

$ doctrine orm:generate-entities --generate-annotations=1 Entities/

它的作用是生成实体以及所有映射信息。现在,如果您在引导程序中更改元数据驱动程序配置以使用实体而不是 yaml 文件,则架构创建应该可以工作。

编辑 2017-05-31 过一段时间再看这个。这看起来像是 Doctrine 由于自动加载问题而无法找到您的“类客户端”的情况。您可以通过在 cli-config.php 中包含引导文件/自动加载器脚本的路径来解决此问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-26
    • 2019-05-02
    相关资源
    最近更新 更多