Zend Framework 2 + Doctrine2 - 未检测到的实体

时间:2014-02-22 16:41:51

标签: doctrine-orm zend-framework2

您好我使用composer来创建ZF2骨架应用程序。 安装了doctrine-module,doctrine-orm-module等作曲家文件如下:

  

{ "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配置,如下所示:

  

'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' ) ))),

我将我的实体添加到: 的模块/应用/ SRC /应用/实体/ user.php的

但是当我跑步时: php zf.php orm:info

我收到以下消息:

  

[异常]
  您没有任何映射的Doctrine ORM实体   根据目前的配置。如果您有实体或   映射文件时,应检查映射配置是否有错误。

如果我尝试

php zf.php orm:schema-tool:create

我得到:

  

没有要处理的元数据类。

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

编辑: 以下是评论中要求的实体代码:

<?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我收到错误。 使用的虚拟化是Paralles 8,主机OS是OSX,guest是Debian 7。 我在/ media / psf / mount中工作。

2 个答案:

答案 0 :(得分:2)

您的doctrine配置中的__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.phpchdir(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;
    }
}

答案 1 :(得分:2)

问题在于过时的并行工具。 在做了一些调查之后,我发现有一个新版本的parallels工具可用。

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

感谢您的帮助。