Я работаю над проектом 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. Любые идеи?