Использование Doctrine 2 Annotation reader для пользовательских аннотаций - PullRequest
2 голосов
/ 19 июля 2011

Я довольно новичок в Doctrine 2 и использую аннотации для сопоставления моей базы данных.Я хочу пойти немного дальше и использовать некоторые пользовательские аннотации.Цель состоит в том, чтобы иметь возможность создавать формы и такие, которые могут иметь настройки, созданные с помощью аннотаций.У меня проблемы с чтением ЛЮБЫХ аннотаций - даже классовые, такие как @Table, не возвращаются из анализатора.

Я использую Codeigniter 2 и Модульные расширения.В моем контроллере у меня есть:

$reader = new \Doctrine\Common\Annotations\AnnotationReader();
$reader->setDefaultAnnotationNamespace('MyCompany\Annotations');
$reflClass = new ReflectionClass('models\User');
$classAnnotations = $reader->getClassAnnotations($reflClass);
print_r($classAnnotations);

, который возвращает пустой массив.

У меня есть файл в папке с библиотеками / аннотациями, Bar.php:

namespace MyCompany\Annotations;

class Bar extends \Doctrine\Common\Annotations\Annotation
{
    public $foo;
}

и, наконец, моя пользовательская модель:

/**
* @Entity
* @Table(name="user")
* @MyCompany\Annotations\Bar(foo="bar")
* @MyCompany\Annotations\Foo(bar="foo")
*/

class User {

}

Я пытаюсь следовать этому примеру: http://www.doctrine -project.org / projects / common / 2.0 / docs / reference / annotations / en# setup-and-configuration

Заранее спасибо за помощь!

Марк.

Ответы [ 2 ]

2 голосов
/ 19 ноября 2012

использование

Doctrine\Common\Annotations\AnnotationRegistry

AnnotationRegistry::RegisterLoader($universalClassLoader);
AnnotationRegistry::RegisterFile(__DIR__ . ' PATH_TO_DoctrineAnnotations.php ');
0 голосов
/ 10 апреля 2012

Как вы уже поняли, вам нужно включить ваши пользовательские файлы / классы аннотаций, прежде чем вы сможете их использовать.

Хотя включение их в ваш контроллер будет работать, почему бы не сделать это способом Doctrine!

В ORM Doctrine2 есть файл с именем DoctrineAnnotations.php в папке Doctrine/ORM/Mapping/Driver/.Это выглядит так:

...
require_once __DIR__.'/../GeneratedValue.php';
require_once __DIR__.'/../Version.php';
require_once __DIR__.'/../JoinColumn.php';
require_once __DIR__.'/../JoinColumns.php';
require_once __DIR__.'/../Column.php';
...

Итак, я создал аналогичный файл в моей библиотеке и загрузил мои аннотации, включив этот «драйвер» (например, в свой загрузчик).

В моем приложении на основе ZF (с использованием невероятной настройки Zf1-D2 Гильерма Бланко ) я просто добавил свой «драйвер аннотаций» к своему application.ini, вот так (все в одной строке):

resources.doctrine.orm.entityManagers.default
  .metadataDrivers.annotationRegistry.annotationFiles[]
  = APPLICATION_PATH "/path/to/my/library/ORM/Mapping/Driver/MyAnnotations.php"
...