автоматическая загрузка не работает корректно с помощью автозапуска.php в каталоге поставщиков
У меня проблем с автозагрузкой композитора как автозагрузчик не может разрешить доктринаОРМ отображениятаблицы. Для Unittests я создал классы сущностей доктрины с типичными аннотациями:
<?php
namespace OmniSearchTestEntity;
use DoctrineORMMapping as ORM;
/**
* Picture
*
* @ORMTable(name="picture")
* @ORMEntity
*/
class Picture
{
И создал новый менеджер сущностей, используя эти сущности. Но я получаю сообщение:
DoctrineCommonAnnotationsAnnotationException: [Semantical Error] The annotation "@DoctrineORMMappingTable" in class OmniSearchTestEntityPicture does not exist, or could not be auto-loaded.
Для некоторых unittest
Во-первых, у меня есть следующая структура проекта:
/src
/OmniSearch
SomeClass.php
/tests
/OmniSearchTest
SomeClassTest.php
/composer.json
/phpunit.xml.dist
Мой композитор.json выглядит так:
{
/* ... */
"require": {
"php": ">=5.4",
"doctrine/orm": "2.*"
},
"require-dev": {
"phpunit/phpunit": "4.*"
},
"autoload": {
"psr-0": {
"OmniSearch\": "src/"
}
},
"autoload-dev": {
"psr-0": {
"OmniSearchTest\": "tests/"
}
}
}
В то время как мой 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>
Я отрезал этот проект от другого моего проекта zf2, где автопогрузка работала нормально. Я не уверен, что именно пошло не так, потому что автогенерированные autoload_namespaces.php содержит отображение:
'Doctrine\ORM\' => array($vendorDir . '/doctrine/orm/lib'),
2 ответа:
Это своего рода выстрел в темноте, но приложения Symfony 2 включают автоматическую загрузку.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;
Я никогда не исследовал почему-либо подробно, так как я не использую аннотации. Но все-таки попробуй. Это не повредит.