【问题标题】:Zend Framework 2 + Doctrine2 - Entities not detectedZend Framework 2 + Doctrine2 - 未检测到实体
【发布时间】:2014-03-24 07:26:51
【问题描述】:

您好,我使用 composer 创建了 ZF2 骨架应用程序。 在下面安装了学说模块、学说模块等composer文件:

{ "name": "zendframework/skeleton-application", "description": "Skeleton Application for ZF2", "license": "BSD-3-Clause", "keywords": [ "framework", "zf2" ], "homepage": "http://framework.zend.com/", "require": { "php": ">=5.3.3", "zendframework/zendframework": "2.2.*", "doctrine/doctrine-orm-module": "0.*", "doctrine/data-fixtures": "dev-master", "zendframework/zend-developer-tools": "dev-master", "doctrine/migrations": "dev-master", "bjyoungblood/bjy-profiler": "dev-master", "zendframework/zftool": "dev-master" } }

在模块中添加了如下教义配置:

'doctrine' => array( 'driver' => array( __NAMESPACE__.'_entities' => array( 'class' =>'Doctrine\ORM\Mapping\Driver\AnnotationDriver', //'cache' => 'array', 'paths' => array( __DIR__ . '/../src/'. __NAMESPACE__ .'/Entity', ) ), 'orm_default' => array( 'drivers' => array( __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_entities' ) ))),

我将我的实体添加到: module/Application/src/Application/Entity/User.php

但是当我运行时: php zf.php orm:信息

我收到以下消息:

[例外]
您没有任何映射的 Doctrine ORM 实体 按照目前的配置。如果您有实体或 映射文件,您应该检查映射配置是否有错误。

如果我尝试

php zf.php orm:schema-tool:create

我明白了:

没有要处理的元数据类。

如何让 Doctrine 生成我的数据库?我做错了什么?

编辑: 这是 cmets 中要求的实体代码:

<?php
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/** @ORM\Entity */
class User {
    /**
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     * @ORM\Column(type="integer")
     */
    protected $id;

    /** @ORM\Column(type="string") */
    protected $fullName;
}

小更新,

我实际上是在虚拟机中运行它。文件所在的文件夹是从主机挂载的。如果我将文件复制到 tmp 文件夹,它工作得很好。如果我在挂载的文件夹中运行 php zf.php orm:info ,我会收到错误消息。 使用的虚拟化是 Parallels 8,主机操作系统是 OSX,来宾是 Debian 7。 我在 /media/psf/mount 工作。

【问题讨论】:

  • 您是否在配置文件中添加了命名空间?
  • 是的。在文件的顶部有命名空间应用程序;否则会出现致命错误...
  • 你能显示你的实体代码吗?
  • 当然,我将它添加到原始问题中。
  • 小更新,我实际上是在虚拟机中运行它。文件所在的文件夹是从主机挂载的。如果我将文件复制到 tmp 文件夹,它工作得很好。如果我在挂载的文件夹中运行 php zf.php orm:info 我会得到一个错误。

标签: doctrine-orm zend-framework2


【解决方案1】:

您的学说配置中的__NAMESPACE__ 指令一定有问题:您的配置可能不使用命名空间,因此__NAMESPACE__ 将解析为主命名空间。

你可以试试这样的配置:

'doctrine' => array(
    'driver' => array(
        'application_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(
                'module/Application/src/Application/Entity',
            ),
        ),

不需要使用__DIR__,您可以使用应用程序根目录,因为 ZendApplication 是 chrooted(在 public/index.php 中:chdir(dirname(__DIR__));)。

最后,您还可以指定实体的表名和映射列的 getter/setter:

<?php
namespace Application\Entity;
use Doctrine\ORM\Mapping as ORM;
/** 
 * @ORM\Entity 
 * @ORM\Table(name="user")
 */
class User {
    /**
     * @var int
     * @ORM\Id
     * @ORM\GeneratedValue
     * @ORM\Column(type="integer")
     */
    protected $id;

    /** 
     * @var string
     * @ORM\Column(type="string") 
     */
    protected $fullName;

    /** 
     * @return int 
     */
    public function getId()
    {
        return $this->id;
    }

    /** 
     * @param int $id
     */
    public function setId($id)
    {
        $this->id = $id;
    }

    /** 
     * @return string
     */
    public function getFullName()
    {
        return $this->fullName;
    }

    /** 
     * @param string $fullname
     */
    public function setFullName($fullname)
    {
        $this->fullName= $fullname;
    }
}

【讨论】:

  • 不工作。我怀疑它不起作用,因为它是一个已安装的文件夹。正如我在编辑中提供的其他信息一样。
【解决方案2】:

问题在于过时的并行工具。 经过一番调查,我发现有一个新版本的并行工具可用。

手动更新工具,重启虚拟机解决了这个问题。 即使原始代码也没有任何问题,并且在更新后一切正常。 我想有一个相似的错误,但我没有在网上找到任何关于它的参考。

感谢您的帮助。

【讨论】:

  • 因为您的问题是由完全不同的事情引起的,所以拒绝对您不起作用的答案并不是最好的办法——只是说'
  • 答案没有带来任何有助于解决问题的东西。提供的代码是正确的,他们都试图解决这个问题,所有答案都是在问题更新完成后发布的,说明如果粘贴到 tmp 文件夹,代码可以正常工作。
  • 你的问题让我们有点失望:你主要描述配置和代码,只是关于实际问题的一小部分信息(“小更新”)。否决票感觉像是在惩罚那些追随你问题的主要趋势的人,而不是隐藏的问题。下次我的建议:更新你的问题,让真正的问题成为焦点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
相关资源
最近更新 更多