ZF2应用程序中的原则2:未找到实体“没有要处理的元数据类”。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZF2应用程序中的原则2:未找到实体“没有要处理的元数据类”。相关的知识,希望对你有一定的参考价值。

在Zend Framework 2项目中,Doctrine 2无法找到我的实体,我不知道为什么。对我来说,一切看起来都正确,但php ./vendor/bin/doctrine-module orm:schema-tool:create命令基于实体创建数据库导致No Metadata Classes to process.

当然我首先确定所有模块都已加载,所以它并不那么容易;-)我也已经对这个问题做了一些研究,似乎大多数时候,它的名称空间相关,但是我再也看不到了那里有什么问题。我还生成了自动加载文件。

您是否能够发现这些文件中的任何错误,为什么Doctrine无法找到实体?它可能与我的文件中的错误有关吗?

module.config.php中,Doctrine配置如下:

'doctrine' => [
    'driver' => [
      'Catalog_entities' => [
        'class' =>'DoctrineORMMappingDriverAnnotationDriver',
        'cache' => 'array',
        'paths' => [__DIR__ . '/../src/Catalog/Entity']
      ],
    ],

    'orm_default' => [
      'drivers' => [
        'CatalogEntity' => 'Catalog_entities'
      ],
    ],
],

module.config.php没有namespace声明,因为它被包含在Module.php中,顶部有namespace Catalog;

module/Catalog/src/Catalog/Entity/WorkEntity.php的实体看起来像这样:

namespace CatalogEntity;

use DoctrineORMMapping as ORM;

    /** @ORMEntity */
    class Work {
        /**
         * @ORMId
         * @ORMGeneratedValue(strategy="AUTO")
         * @ORMColumn(type="integer")
         */
        protected $id;

        public function getId() {
          return $this->id;
        }

        public function setId($id) {
          $this->id = $id;
        }
}
答案

首先修复@Crisp他的评论。文件名和类名应始终对应。

如果这不能解决它,你可以检查你的Module.php中是否正确加载了module.config.php:

/**
 * @return array
 */
public function getConfig()
{
    return __DIR__ . '/../../config/module.config.php';
}

我还建议使用命名空间常量,这样您就可以简单地将配置复制到不同的模块而不会改变任何事情,并最大限度地降低在忘记更改内容时覆盖其他配置的风险。像这样:

'driver' => [
    __NAMESPACE__ . '_driver' => [
        'class' => 'DoctrineORMMappingDriverAnnotationDriver',
        'cache' => 'array',
        'paths' => [__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity']
    ],
    'orm_default' => [
        'drivers' => [
            __NAMESPACE__ . 'Entity' => __NAMESPACE__ . '_driver'
        ]
    ]
],

以上是关于ZF2应用程序中的原则2:未找到实体“没有要处理的元数据类”。的主要内容,如果未能解决你的问题,请参考以下文章

未找到 ZF2 类 PDO,但在 php 配置中启用了 PDO

ZF2 Doctrine - 使用查询构建器如何指向存储库中的自定义方法

ZF2 - 使用 ORM 原则进行一对一连接和集合

带有 ZF2 的 Doctrine 2 如何更新行

ZF2:在 'Application\Entity\ #user' 中找不到目标实体

致命错误:调用未定义的方法 MyModule\Entity\MyEntity::findAll() 学说 orm 2 zf2