2017-04-02 33 views
0

我是zend3的新手,遇到问题,版本3中不再存在getservicelocator,我正在使用控制器,我想知道如何实现此迁移,任何人都知道如何使这种变化如何将getServicelocator更新为zend 3

namespace Base\Controller; 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 
use Zend\Paginator\Paginator; 
use Zend\Paginator\Adapter\ArrayAdapter; 

abstract class AbstractController extends AbstractActionController 
{ 

    /** 
    * Entity manager 
    * @var 
    */ 
    protected $em; 
    /** Entity 
    * @var 
    */ 
    protected $entity; 
    /** 
    * Controller 
    * @var 
    */ 
    protected $controller; 
    /** 
    * @var 
    */ 
    protected $route; 
    /** 
    * @var 
    */ 
    protected $service; 
    /** 
    * @var 
    */ 
    protected $form; 

    private $configTable; 
    /** 
    * AbstractController constructor. 
    */ 
    abstract function __construct(); 
... 
/** 
    * 
    * @return \Zend\Http\Response 
    */ 
    public function excluirAction() 
    { 
     $service = $this->getServiceLocator()->get($this->service); 
     $id = $this->params()->fromRoute('id',0); 
     // Abstract service 
     if ($service->remove(array('id' => $id))) { 
      $this->flashMessenger()->addSuccessMessage('Success'); 
     } else { 
      $this->flashMessenger()->addErrorMessage('Error'); 
     } 

     return $this->redirect()->toRoute($this->route, array('controller' => $this->controller)); 

    } 

回答

1

架构是不是在你的情况真的很不错,你为什么会在一个抽象的控制器的动作......

正确的方法将是控制器不抽象并通过构造函数传递服务。

错误的方法是使用a delegator注入服务定位器。

删除服务定位器的想法是在类的依赖关系上更清晰,所以代码更可读性(例如“哦,我看到这个类需要...和...做NAME_OF_THE_ACTION“)。 此外,它极大地提高了代码的可测试性(您知道模拟/假冒的依赖关系)。

相关问题