Проблема с импортом аннотаций

Я работаю над проектом CodeIgniter, в котором использую Doctrine2 и компонент Symfony2 Validator.

Все мои сущности Doctrine2 use Doctrine\ORM\Mappingи менеджер сущностей распознают их. Моя аннотация сущности выглядит так:

/**
 * @Entity(repositoryClass = "UserRepository")
 * @Table(name = "user")
 * @HasLifecycleCallbacks()
 */

На данный момент я могу сохранять объекты без каких-либо проблем. Первая проблема возникает, когда я пытаюсь использовать компонент Symfony2 Validator. Когда я пытаюсь проверить объект User, я получаю эту ошибку:

[Semantical Error] The annotation "@Entity" in class Entity\User was never imported. Did you maybe forget to add a "use" statement for this annotation?

Единственное «исправление» этой проблемы — через use Doctrine\Mapping\Entity, но я должен сделать это для каждой аннотации, используемой моей сущностью (Table, Column, ManyToOne и т. д. ). Я пытаюсь понять, почему мне нужно явно useкаждый класс аннотации вместо того, чтобы автоматически распознавать их (, не должен use Doctrine\ORM\Mappingпредоставлять мне доступ ко всем классам в этом пространстве имен? ).

Затем я попробовал use Doctrine\ORM\Mapping as ORMи предварил все свои аннотации ORM\. Экс:@ORM\Entity(). Валидатор Symfony2 перестал жаловаться, но теперь Doctrine2 жалуется, что Class Entity\User is not a valid entity or mapped super class.Я понятия не имею, почему этот метод работает для валидатора, но не для Doctrine2. Если я запускаю консольную команду doctrine:orm:info, мой объект Userне распознается.

Поскольку это приложение CodeIgniter, я автоматически загружаю библиотеки Symfony2 и Doctrine2. Мой код автозагрузки выглядит следующим образом:

# Symfony2 ClassLoader component
require_once __DIR__. '/application/libraries/symfony/src/Symfony/Component/ClassLoader/UniversalClassLoader.php';
$loader = new \Symfony\Component\ClassLoader\UniversalClassLoader();
$loader->register();
$loader->registerNamespace('Symfony', __DIR__. '/application/libraries/symfony/src');
$loader->registerNamespace('Doctrine', __DIR__. '/application/libraries/doctrine/lib');

# Doctrine2 
require_once __DIR__. '/application/libraries/doctrine/lib/Doctrine/Common/Annotations/AnnotationRegistry.php';
use Doctrine\Common\Annotations\AnnotationRegistry;
AnnotationRegistry::registerLoader(function($class) use ($loader) {
    $loader->loadClass($class);
    $classExists = class_exists($class, false);
    return $classExists;
});
AnnotationRegistry::registerFile(__DIR__. '/application/libraries/doctrine/lib/Doctrine/ORM/Mapping/Driver/DoctrineAnnotations.php');

Меня не волнует, должен ли я начинать все с ORM\или нет, я просто хочу найти решение, с которым будут работать Symfony2 Validator и Doctrine2. Любые идеи?

8
задан Steven Mercatante 10 August 2012 в 22:40
поделиться