Db \ Adapter에 대한 팩터 리를 사용하기 위해 내 컨트롤러에서 ServiceManager 인스턴스를 가져 오려고합니다. 젠드 프레임 워크 3의 컨트롤러에서 서비스 관리자 인스턴스를 얻는 방법은 무엇입니까?
나는 모듈에 추가/응용 프로그램/설정/module.config.php :'service_manager' => [
'factories' => [
Adapter::class => AdapterServiceFactory::class,
],
],
나는 다음과 같은 라인을 추가/자동로드/local.php 파일 config (설정)하려면 지금
'db' => [
'driver' => 'Mysqli',
'database' => 'mydb',
'username' => 'myuser',
'password' => 'mypassword',
]
를 I 내 모듈/Application/src/Controller/IndexController.php의 ServiceManager에 액세스하려고합니다. 어떻게해야합니까?
나는 $sm = $this->getPluginManager();
을 시도했지만 성공하지 못했습니다.
Too few arguments to function Zend\Db\Adapter\Adapter::__construct(), 0 passed in (...)\vendor\zendframework\zend-servicemanager\src\Factory\InvokableFactory.php on line 30 and at least 1 expected
내가 무엇을 할 수, 내 그 어댑터 객체를 얻을 것이다 ServiceManager에를 얻을 : 나는 PluginManager를 함께 $serviceManager->get(Adapter::class)
를 실행하면 그것은 내게 오류를 준다?
제가
'controllers' => [
'factories' => [
Controller\IndexController::class => function(ContainerInterface $serviceManager) {
return new Controller\IndexController($serviceManager);
},
],
],
I 또한 module.config.php에 getServiceConfig() 메소드를 추가로
'controllers' => [
'factories' => [
Controller\IndexController::class => InvokableFactory::class,
],
],
에서 컨트롤러 공장 변경 및 인 IndexController로 생성자를 첨가 ServiceManager를 수신합니다. 이제 컨트롤러 내부에 액세스 할 수 있습니다.
하지만 지금 내 질문이 있습니다. 더 좋고 더 좋은 "zend like"방법이 있습니까?
이 링크는 좋은 대답을주고 올바른 방법입니다.부가 메모 : 완벽한 서비스 관리자를 삽입하고 싶지는 않습니다. 그것은 귀하의 컨트롤러 untestable합니다. 이 예제에서 볼 수 있듯이 EntityManager 만 컨트롤러에 삽입됩니다. – xtreamwayz
고맙습니다. 방금 테스트 해 봤어. 이제는 다른 수업에서 분리되었습니다. – Ctwx
ZF3에서는 모든 서비스를 주입해야합니다. 심지어 양식에 직접 액세스 할 수도 없습니다. 전의. 컨트롤러에서는'new Form();'을 사용할 수 없습니다. –