ZF2 - 在 Dao 层从 Doctrine Orm 获取数据

ZF2 - Get Data From Doctrine Orm In Dao Layer

我的控制器:

<?php
namespace Admin\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Admin\Controller;
use Admin\Service;

class AdminController extends AbstractActionController
{

    public function indexAction()
    {

        $CrudService = $this->getServiceLocator()->get('CrudService');

        return new ViewModel(
            array('list'=> $CrudService->getList())
        );
    }
}

服务层:

<?php

namespace Admin\Service;
use Admin\Dao;


class CrudService
{
    public function getList()
    {

        $CrudDao=new Dao\CrudDao();
        $list=$CrudDao->getList();
        return $list;
    }
}

道层:

<?php

namespace Admin\Dao;


class CrudDao
{
    public function getList()
    {

        return
            $this->getServiceLocator()->
            get('doctrine.entitymanager.orm_default')->
            getRepository('Admin\Entity\ProductEntity')
                ->findAll();

    }
}

一切都很好但我的问题是 Dao 层 。给我这个 错误:未找到获取服务定位器 Class

我想在 Dao 层从 Doctrine 获取数据,在 Service 层调用 Dao 方法,然后在 Controller 中使用 getServiceLocator 调用服务

您必须注入所有依赖项并使用服务管理器来获取 类。

在你 Module.php 你必须注册并注入依赖项:

class Module
{
    // ...

    public function getServiceConfig()
    {
        $factories = [
            'Admin\Dao\CrudDao' = function (ServiceManager $serviceManager) {
                $entityManager = $serviceManager->get('Doctrine\ORM\EntityManager'),
                return new CrudDao($entityManager);
            },
            'Admin\Service\CrudService' = function (ServiceManager $serviceManager) {
                return new CrudService($serviceManager);
            }
        ];

        return $factories;
    }
}

Dao 将接收 EntityManager:

<?php

namespace Admin\Dao;

class CrudDao
{
    private $entityManager;

    public function __construct($entityManager)
    {
        $this->entityManager = $entityManager;
    }

    public function getList()
    {

        return
            $this->entityManager
            ->getRepository('Admin\Entity\ProductEntity')
            ->findAll();

    }
}

你的 CrudService 会收到 Service manager,然后你就可以得到 CrudDao:

<?php

namespace Admin\Service;
use Admin\Dao;


class CrudService
{
    public function __construct($serviceManager)
    {
        $this->serviceManager = $serviceManager;
    }

    public function getList()
    {
        $CrudDao= $this->serviceManager->get('Admin\Dao\CrudDao');
        $list = $CrudDao->getList();
        return $list;
    }
}

还有你的控制器:

<?php
namespace Admin\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Admin\Controller;
use Admin\Service;

class AdminController extends AbstractActionController
{

    public function indexAction()
    {

        $CrudService = $this->getServiceLocator()->get('Admin\Service\CrudService');

        return new ViewModel(
            array('list'=> $CrudService->getList())
        );
    }
}