2017-10-31 2 views
0

나는zend framework 3 (zf3)의 공장에서 응용 프로그램 구성 값을 검색하는 방법은 무엇입니까?

class MyControllerFactory implements FactoryInterface{ 

    public function __invoke(ContainerInterface $container, $requestedName, array $options = null) { 
     $config = $container->get('Config') ; 
    } 
} 

을 통해 공장에서 구성을 검색 할 수 있지만 내가 zf3에 application.config 설정 배열에 액세스 할 수있는 방법을 application.config.php. 에서 구성한 것을 포함하지 않는 이유는 무엇입니까?

답변

1

구성 application.config.php은 기본 동작으로 ZF3 응용 프로그램을 초기화 할 때 등록 된 ApplicationConfig 서비스 키 아래에 등록됩니다. 그래서 팩토리 메소드에 다음 코드를 사용

$configuration = $container->get('ApplicationConfig'); 
0

이 설명입니다

ZF3에서, 당신은 당신의 응용 프로그램에 필요한 모든 클래스,이를 수리 할 수 ​​있도록에서이를 사용할 수를 만드는 경우 ServiceManager를 통한 애플리케이션. ServiceManager는 등록 된 서비스를 저장하는 컨테이너를 구현합니다. 그러면 어때? ZF는 factory라는 메소드를 사용합니다 (간단히 말해서 객체를 생성합니다). 컨테이너에 서비스를 저장하는 데 도움이됩니다. 그런 다음 ServiceManager를 사용하여 해당 컨테이너에서 서비스를 가져올 수 있습니다. 어떻게 보죠?

ServiceManager 자체는 서비스입니다.

따라서 팩토리를 사용하면 컨트롤러 (예 : IndexController)에서 ServiceManager 인스턴스를 사용할 수 있습니다. 그래서 우리는 그것을 사용하는 모든 서비스를받을 수 있습니다.

응용 프로그램 \ 컨트롤러 \ IndexControllerFactory는

<?php 
    namespace Application\Controller; 

    // This is the container 
    use Interop\Container\ContainerInterface; 
    use Zend\ServiceManager\Factory\FactoryInterface; 

    class IndexControllerFactory implements FactoryInterface 
    { 
     public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) 
     { 
      $serviceManager = $container->get('ServiceManager'); 
      return new IndexController($serviceManager); 
     }  
    } 

우리가 사용할 수 있도록 현실을 구성 할 수 있습니다. ServiceManager에 인스턴스 인 IndexController의 생성자를 통해 사용할 수있게됩니다 (위의 구성에 의해) moudle.config.php IndexControllerFactory에 의해 인스턴스화 인 IndexController 일단

'controllers' => [ 
    'factories' => [ 
     Controller\IndexController::class => Controller\IndexControllerFactory::class, 
    ], 
], 

에서 다음과 같이 변경합니다.