我无法从doctrine 2.0和Zend框架中的控制器访问自定义存储库?
我的文件结构如下: -
application/controllers
/configs
/domain/
Entities/User.php
/Mappings/User.php
Proxies/
Repositories/
vendor/
Doctrine
在User.php中,我已经包含了这样的内容:
namespace Repositories;
use Doctrine\ORM\EntityRepository;
/**
* @entity(repositoryClass="Repositories\UserRepository")
* @Table(name="User")
*/
class User
{
}
即使我尝试了
namespace Entities;
use Doctrine\ORM\EntityRepository;
/**
* @entity(repositoryClass="Entities\UserRepository")
* @Table(name="User")
*/
class User
{
}
我已经通过命令为域/存储库生成了存储库。
现在我在文件夹域/存储库中有我自定义的存储库。 我想在我的UserController.php中访问ex:UserRepository 我试过这个。
$this->em = Zend_Registry::get('em');
$userlist = $this->em->getRepository('Repostories\User')->getusers();
输出:没有这样的文件或目录
如果我尝试过:
$this->em->getRepository('Entities\User')->getusers();
输出:缺少getusers()函数。你的函数应该由findBy
开始请帮忙解决这个问题。
谢谢, 协西巴。
答案 0 :(得分:12)
从存储库
开始// Repositories/UserRepository.php
namespace Repositories;
use Doctrine\ORM\EntityRepository;
class UserRepository extends EntityRepository
{
public function getusers()
{
// etc
}
}
现在是实体
// Entities/User.php
namespace Entities;
/**
* @Entity(repositoryClass="Repositories\UserRepository")
*/
class User
{
// etc
}
如果您的自动加载器可以在Repositories
和Entities
命名空间中找到类,则以下内容应该有效
$em->getRepository('Entities\User')->getusers();
答案 1 :(得分:3)
我同意Phil的观点,这很可能是自动加载的问题 - 我遇到了同样的问题。它通过向应用程序引导文件添加_init函数来解决,该文件包含我的服务,实体和存储库类的条目,如下所示。显然,你必须调整你的路径以匹配你的路径。我的结构在默认的Zend Framework模型目录中有Service,Entity和Repository目录。
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');
$entityAutoloader = new \Doctrine\Common\ClassLoader('Entity', APPLICATION_PATH . '/models');
$autoloader->pushAutoloader(array($entityAutoloader, 'loadClass'), 'Entity');
$repositoryAutoloader = new \Doctrine\Common\ClassLoader('Repository', APPLICATION_PATH . '/models');
$autoloader->pushAutoloader(array($repositoryAutoloader, 'loadClass'), 'Repository');
return $autoloader;
}