1

나는 DB 및 파일 시스템 작업 세트를 관리하는 Zend Framework Module을 만들었습니다. 나는 100 % 테스트 커버리지 (조롱 된 데이터베이스 포함)를 얻었으며이 모듈을 테스트 환경에 통합하여 테스트하고 싶습니다.서비스 레이어를 통해 ZF 이외의 응용 프로그램에서 독립 실행 형 ZF 모듈 호출 가능

현재 인터페이스를 구현하지 않는 /modules/MyModule/src/MyModule/Service/MyModuleService.php에 Service 클래스가 있습니다. 설명서는 이것이 내가해야 할 일이라고 암시하지 않습니다.

class MyModuleService 
{ 
    public function doA(){...} 
    public function doB(){...} 
..... 
} 

기본 응용 프로그램 뼈대에서 응용 프로그램 폴더의 내용을 변경하지 않았습니다. 나는 많은 데이터베이스와 파일 시스템 조작을하는 Model 클래스를 작성했다. Service 클래스는 궁극적으로 이러한 동작을 트리거합니다. 자습서에 따라 기본 구성을 수행하면 ZF 파일 시스템 외부에서 ZF가 클래스에 액세스하려고 할 때 ZF가 클래스를 등록하지 않는 것처럼 보입니다. 내 module.php에서

array(
    'Zend\\Loader\\StandardAutoloader' => Zend\Loader\StandardAutoloader::__set_state(
     array('namespaces'    => 
       array('Zend\\'   => '/usr/lib/zendframework/library/Zend/', 
        'MyModule\\'  => '/path/to/zendframework/module/src/MyModule/', 
      ), 'prefixes'   => array(), 
       'fallbackAutoloaderFlag' => FALSE, 
     ) 
    ) 
); 

나는 다음과 같은 서비스를 선언 할 :

/* Configure DB Service Managers */ 
    public function getServiceConfig() 
    { 
     return array(
      // ... 
      'invokables' => array(
       'myModuleService'=> function ($sm){ 
        $myModuleTable = $sm->get('MyModuleTable\Model\MyModuleTable'); 
        return new MyModuleService($myModuleTable); 
       } 
      ), 
    } 

을 지금이에서 MyModuleService를 인스턴스화 할 수있는 방법

//dependencies for auto loader 
require_once 'Zend/Loader/AutoloaderFactory.php'; 
use Zend\Loader\AutoloaderFactory; 

//NEW registering the autoloader (as per Tomdarkness' response) 
Zend\Loader\AutoloaderFactory::factory(array(
     'Zend\Loader\StandardAutoloader' => array(
      'autoregister_zf' => TRUE, 
      'namespaces'  => array(
       'MyModule'=> '/path/to/zendframework/module/src/MyModule', 
      ) 
     ) 
    ) 
); 

//what factories are auto-loaded? 
var_export(AutoloaderFactory::getRegisteredAutoloaders()); 

var_export 이제 다음 반환 자동로드 된 클래스?

답변

0

당신은 전화 :

var_dump(AutoloaderFactory::getRegisteredAutoloaders()); 

하지만 실제로 자동 로더를 등록하지했습니다. 당신이 실행하는 데 필요한 표준 자동 로더를 등록하려면 : 당신이 classmaps를 생성 한 경우

Zend\Loader\AutoloaderFactory::factory(array(
    'Zend\Loader\StandardAutoloader' => array(
     'autoregister_zf' => true 
    ) 
)); 

또한 factory 방법을 통해 Classmap 자동 로더를 등록 할 수 있습니다.

작성자를 사용하는 경우 AutoloaderFactory를 사용하는 대신 파일에 실제로 vendor/autoload.php을 포함하기를 원할 것입니다. 그러나이 메서드를 사용하는 경우 섹션에 등록 할 모듈 네임 스페이스가 autoload이어야합니다.

+0

덕분에 @ 도와 주셨습니다. 어떻게하면 해당 클래스에서 인스턴스를 만들 수 있습니까? 원래 게시물을 업데이트했습니다. – Laurent

+0

나는 그것을 설정하는 나의 방법이 잘못 되었기 때문에 이것을 해결 된 것으로 표시 할 것이다. ZF 모듈을 외부 앱과 통합하는 더 좋은 방법을 찾아야합니다. http://stackoverflow.com/questions/19154300/zf2-load-service-config-from-module – Laurent