2017-04-02 6 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 "). 또한, 코드 테스트 가능성을 향상시킵니다 (모방/위조에 대한 의존성을 알고 있음).