Проблема с импортом аннотаций
Я работаю над проектом CodeIgniter, в котором я использую Doctrine2 и компонент Symfony2 Validator.
Все мои сущности Doctrine2use 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
, но я должен сделать это дляevery аннотация, используемая моей сущностью (Таблица, Столбец, 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. Есть идеи?