当我尝试进行YAML Mapping时,Doctrine 2.0 ReflectionException

时间:2011-02-01 09:26:59

标签: php orm doctrine yaml doctrine-orm

我的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)

当我运行该文件以使用此instruccion在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

相同

我不知道为什么会发生这种情况,任何想法? 感谢

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:-1)

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

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

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

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