1

我开始开发新的应用程序,这是我第一个用 ZF2 编写的应用程序。我有一些使用 ZF1 和 Doctrine1 进行应用程序的经验,但现在我想使用 ZF2 和 Doctrine2 进行应用程序。默认实体文件夹位于模块目录中。我想要一个模型文件夹,它在整个应用程序中共享。所以我准备了这样的应用程序结构:

config
models
 generated
module
 Administration
 Application
public
vendor

我设计了数据库(MySQL)并将其导入 XML 表单,使用 Doctrine CLI。我还生成了模型。但现在我遇到了问题 - 如何在我的模块中使用它?我准备了一些代码:

protected $em;

public function setEntityManager(EntityManager $em)
{
    $this->em = $em;
}

public function getEntityManager()
{
    if (null === $this->em) {
        $this->em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
    }
    return $this->em;
}

public function indexAction()
{
    return new ViewModel(array(
        'carriers' => $this->getEntityManager()->getRepository('Carrier')->findAll()
    ));
}

而且我有一个错误“找不到类运营商”。这是路径的问题,但我是 ZF2 的新手,我不知道如何配置它......

4

1 回答 1

0

您在配置中定义 Doctrine 2 实体的路径。现在我假设你有一个类似于这个的配置:

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

基本上你要做的是正确映射路径。您可以在其中orm_defaults单独定义每个模块的驱动程序,或者只使用全局驱动程序。

__NAMESPACE__ . '_driver'您内部定义具有给定名称的驱动程序,并定义实体的确切存储位置。在您的情况下,这可能类似于

'paths' => array(__DIR__ . '/../src/Administration/Entity')

或者无论您的模块被命名为您的实体存储位置。在这种情况下Administration

此外,始终分配完全限定的存储库名称,如下所示:

->getRepository('NAMESPACE\Entity\Carrier')
于 2012-11-19T15:48:06.137 回答