作为元旦黑客松,我想我会采用 Rob Allen 的出色zend 框架 2 测试版教程,并使用 ZF2 模块 SpiffyDoctrine 和 SpiffyDoctrineORM 替换教义 2 而不是 Zend\Db\Table。
一切进展顺利,让实体经理开始并设置我的实体:
<?php
namespace AlbumDoc\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* @ORM\Entity
* @ORM\Table(name="album")
*/
class Album {
/**
* @ORM\Id
* @ORM\Column(type="integer");
* @ORM\GeneratedValue(strategy="AUTO")
*/
public $id;
/**
* @ORM\Column(type="string")
*/
public $artist;
/**
* @ORM\Column(type="string")
*/
public $title;
/**
* global getter
*
* @param type $property
* @return type
*/
public function __get($property) {
return $this->$property;
}
/**
* Global setter
*
* @param type $property
* @param type $value
*/
public function __set($property, $value) {
$this->$property = $value;
}
}
由于我是 Doctrine 和 Zend Framework 的新手,我想我会做一个测试,看看我是否可以让实体管理器保存到数据库中。我在 indexController 中设置我的代码如下:
$em = $this->getLocator()->get('doctrine_em');
$album = new \Application\Entity\Album();
$album->artist = 'Art Ist';
$album->title = 'Cool Title';
$em->persist($album);
$em->flush();
我遇到的问题是,当此代码运行时,出现以下错误:
Class Application\Entity\Album is not a valid entity or mapped super class.
从我发现的有限的东西中,我认为问题与 Doctrine 不知道实体路径或与 AnnotationDriver 有关。
猜测有一些东西需要添加到相册模块的配置文件中,但找不到什么。
更新:由于我没有足够的声誉点来正式发布答案,我将在此处添加答案。找到了解决方案。实际上有两个部分出了问题。
首先是一个愚蠢的错误,我忘了把 module.spiffy_doctrine_orm.config.php 文件末尾的 .dist 去掉,该文件会被放到应用程序的 config/autoload 目录中。
第二部分在这个文件中,我没有将设置数组的驱动程序设置更改为指向:
'driver' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'namespace' => 'AlbumDoc\Entity',
'paths' => array('module/AlbumDoc/src/AlbumDoc/Entity')
)
如果您为应用程序设置全局实体路径,这确实引出了每个模块是否有可能拥有自己的实体的问题。但这可以再等一天。