Zend Framework和Doctrine 2 - 你在哪里放置你的实体?

时间:2011-04-27 23:06:58

标签: zend-framework models doctrine-orm

我正在使用带有Doctrine 2的ZF和Bisna应用程序资源来将两者绑定在一起。到目前为止,我一直将我的实体,代理,存储库和服务层放在我自己的App文件夹下的库中。因此,例如,我的实体将具有App \ Entity的命名空间。这工作正常但是在ZF布局的models目录下没有我所有的实体内容似乎很奇怪。

所以,现在我正在尝试将所有内容移动到models目录中,而ZF无法再找到我的类了。我确保在application.ini配置中更改代理和映射命名空间和目录以匹配新位置和命名空间(我将实体命名空间更改为实体,并对存储库和服务层进行了相同的适当更改。

在我的登录控制器中,我调用UserService:

$userService = new Service\UserService($em);

我找回了一个致命的错误,说找不到这堂课。知道我在这里缺少什么吗?

  

致命错误:未找到“服务\用户服务”类...

我的UserService类上的命名空间设置为Service。该文件位于application / models / Service / UserService.php。

namespace Service;

class UserService
{
...
}

以下是我的application.ini中的一些部分,显示了我的目录和命名空间

resources.doctrine.orm.entityManagers.default.proxy.namespace = "Proxy"
resources.doctrine.orm.entityManagers.default.proxy.dir = APPLICATION_PATH "/models/Proxy"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.mappingNamespace = "Entity"
resources.doctrine.orm.entityManagers.default.metadataDrivers.0.mappingDirs[] = APPLICATION_PATH "/models/Entity"

1 个答案:

答案 0 :(得分:4)

您需要将Service命名空间位置添加到自动装带器。

在Bootstrap类中尝试这样的事情

protected function _initAutoloader()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();

    require_once 'Doctrine/Common/ClassLoader.php';

    $serviceAutoloader = new \Doctrine\Common\ClassLoader('Service', APPLICATION_PATH . '/models');
    $autoloader->pushAutoloader(array($serviceAutoloader, 'loadClass'), 'Service');

    return $autoloader;
}

编辑:您可能已经注册了App命名空间,只需替换它。