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

问题描述 投票:0回答:1

在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' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => [__DIR__ . '/../src/Catalog/Entity']
      ],
    ],

    'orm_default' => [
      'drivers' => [
        'Catalog\Entity' => 'Catalog_entities'
      ],
    ],
],

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

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

namespace Catalog\Entity;

use Doctrine\ORM\Mapping as ORM;

    /** @ORM\Entity */
    class Work {
        /**
         * @ORM\Id
         * @ORM\GeneratedValue(strategy="AUTO")
         * @ORM\Column(type="integer")
         */
        protected $id;

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

        public function setId($id) {
          $this->id = $id;
        }
}
php doctrine-orm zend-framework2
1个回答
1
投票

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

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

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

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

'driver' => [
    __NAMESPACE__ . '_driver' => [
        'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
        'cache' => 'array',
        'paths' => [__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity']
    ],
    'orm_default' => [
        'drivers' => [
            __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
        ]
    ]
],
© www.soinside.com 2019 - 2024. All rights reserved.