tor*_*ten 6 php phpunit autoload doctrine-orm composer-php
由于自动加载器无法解析Doctrine\ORM\Mapping\Table,因此我很难对作曲家进行自动加载.对于Unittests,我创建了带有典型Annotations的doctrine实体类:
<?php
namespace OmniSearchTest\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* Picture
*
* @ORM\Table(name="picture")
* @ORM\Entity
*/
class Picture
{
Run Code Online (Sandbox Code Playgroud)
并使用此实体创建了一个新的实体管理器.但我收到消息:
Doctrine\Common\Annotations\AnnotationException: [Semantical Error] The annotation "@Doctrine\ORM\Mapping\Table" in class OmniSearchTest\Entity\Picture does not exist, or could not be auto-loaded.
Run Code Online (Sandbox Code Playgroud)
对于一些Unittests
首先,我有以下项目结构:
/src
/OmniSearch
SomeClass.php
/tests
/OmniSearchTest
SomeClassTest.php
/composer.json
/phpunit.xml.dist
Run Code Online (Sandbox Code Playgroud)
我的composer.json看起来像这样:
{
/* ... */
"require": {
"php": ">=5.4",
"doctrine/orm": "2.*"
},
"require-dev": {
"phpunit/phpunit": "4.*"
},
"autoload": {
"psr-0": {
"OmniSearch\\": "src/"
}
},
"autoload-dev": {
"psr-0": {
"OmniSearchTest\\": "tests/"
}
}
}
Run Code Online (Sandbox Code Playgroud)
虽然我的phpunit看起来像这样:
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
backupStaticAttributes="false"
bootstrap="vendor/autoload.php"
strict="true"
verbose="true">
<testsuites>
<testsuite name="omnisearch">
<directory>./tests/OmniSearchTest</directory>
</testsuite>
</testsuites>
</phpunit>
Run Code Online (Sandbox Code Playgroud)
我从我的另一个zf2项目中切断了这个项目,自动加载工作正常.我不确定究竟出了什么问题,因为自动生成的autoload_namespaces.php包含映射:
'Doctrine\\ORM\\' => array($vendorDir . '/doctrine/orm/lib'),
Run Code Online (Sandbox Code Playgroud)
Cer*_*rad 14
这是一个黑暗的镜头,但Symfony 2应用程序包括一个autoload.php文件,它显式加载注释注册表.
// autoload.php
use Doctrine\Common\Annotations\AnnotationRegistry;
use Composer\Autoload\ClassLoader;
/**
* @var ClassLoader $loader
*/
$loader = require __DIR__.'/../vendor/autoload.php';
AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
return $loader;
Run Code Online (Sandbox Code Playgroud)
因为我不使用注释,所以我从未真正研究过为什么会有任何细节.但试一试.不能伤害.