3

我对 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

提前感谢您的帮助!

标记。

4

2 回答 2

3

利用

Doctrine\Common\Annotations\AnnotationRegistry

AnnotationRegistry::RegisterLoader($universalClassLoader);
AnnotationRegistry::RegisterFile(__DIR__ . ' PATH_TO_DoctrineAnnotations.php ');
于 2012-11-19T04:19:34.793 回答
0

正如您所知道的,您需要先包含自定义注释文件/类,然后才能使用它们。

尽管将它们包含在您的控制器中会起作用,但为什么不按照 Doctrine 的方式来做呢!

Doctrine2 的 ORM 在文件夹中有一个名为 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 的应用程序中(使用Guilherme Blanco 出色的 Zf1-D2 设置),我刚刚将我的“注释驱动程序”添加到我的application.ini中,如下所示(全部在一行上):

resources.doctrine.orm.entityManagers.default
  .metadataDrivers.annotationRegistry.annotationFiles[]
  = APPLICATION_PATH "/path/to/my/library/ORM/Mapping/Driver/MyAnnotations.php"
于 2012-04-10T09:18:47.877 回答