如何从doctrine 2.0和Zend框架中的控制器访问自定义存储库?

Hep*_*bah 3 zend-framework doctrine-orm

我无法从doctrine 2.0和Zend框架中的控制器访问自定义存储库?

我的文件结构如下: -

application/controllers
       /configs
       /domain/
              Entities/User.php
                      /Mappings/User.php
              Proxies/
              Repositories/
vendor/
    Doctrine
Run Code Online (Sandbox Code Playgroud)

在User.php中,我包括这样的:

namespace Repositories;

use Doctrine\ORM\EntityRepository;

/**
 * @entity(repositoryClass="Repositories\UserRepository")
 * @Table(name="User")
 */
class User
{
}
Run Code Online (Sandbox Code Playgroud)

即使我尝试过

namespace Entities;

use Doctrine\ORM\EntityRepository;

/**
 * @entity(repositoryClass="Entities\UserRepository")
 * @Table(name="User")
 */
class User
{
}
Run Code Online (Sandbox Code Playgroud)

我已经通过命令为域/存储库生成了存储库.

现在我在文件夹域/存储库中有我自定义的存储库.我想在我的UserController.php中访问ex:UserRepository我试过这个.

$this->em = Zend_Registry::get('em');

$userlist = $this->em->getRepository('Repostories\User')->getusers();
Run Code Online (Sandbox Code Playgroud)

输出:没有这样的文件或目录

如果我试过:

$this->em->getRepository('Entities\User')->getusers();
Run Code Online (Sandbox Code Playgroud)

输出:缺少getusers()函数.你的函数应该由findBy开始

请帮忙解决这个问题.

谢谢,Hephzibah.

Phi*_*hil 12

从存储库开始

// Repositories/UserRepository.php
namespace Repositories;

use Doctrine\ORM\EntityRepository;

class UserRepository extends EntityRepository
{
    public function getusers()
    {
        // etc
    }
}
Run Code Online (Sandbox Code Playgroud)

现在是实体

// Entities/User.php

namespace Entities;

/**
 * @Entity(repositoryClass="Repositories\UserRepository")
 */
class User
{
    // etc
}
Run Code Online (Sandbox Code Playgroud)

如果您的自动加载器可以在两者RepositoriesEntities命名空间中找到类,则以下内容应该可以正常工作

$em->getRepository('Entities\User')->getusers();
Run Code Online (Sandbox Code Playgroud)

  • @Jonathan看不出为什么不.您可以将业务逻辑封装在服务类或类似服务中,但这实际上取决于您的设计 (2认同)