당신은 업데이트 또는 작곡가에서 젠드 프레임 워크 3를 체크 아웃하고 그냥 교재 작업을 만들기위한 있다면, 당신은 getServiceLocator()
사용할 수 이전 (2.X) 버전으로 다운 그레이드 할 수있는, 아직 는 사용되지 않는 경우 . 3.0 이후부터 삭제되었습니다.
더 나은 접근 방법은 앞으로 어떻게해야 할 것이므로 해결 방법을 이해하는 것입니다. 기본적으로, 런타임 중간에 의존성을 주입해서는 안되지만 컨트롤러에 팩토리를 등록한 다음 생성자를 통해 종속성을 전달해야합니다. 가능한 해결 방법은 다음과 같은 질문에 대한 허용 대답에 잘 설명되어 있습니다 : 그것은 컨트롤러에 즉시 사용할 수 있도록 위의 예에서
PHP Deprecated: You are retrieving the service locator from within the class ZFTool\Controller\ModuleController
는
$db = $this->getServiceLocator()->get('Db\ApplicationAdapter');
는 생성자의 인자로 전달됩니다. 그래서 비슷한 방식으로, 이미 생성자를 통해 주입
Doctrine\ORM\EntityManager
에 반환해야하는, 당신의
IndexController
을위한 공장을 만들어야합니다 (실제 모듈 이름으로 "yourModule"를 대체하는 기억) :
이
namespace yourModule\Controller\Factory;
use Interop\Container\ContainerInterface;
use Zend\ServiceManager\Factory\FactoryInterface;
use yourModule\Controller\IndexController;
class IndexControllerFactory implements FactoryInterface {
public function __invoke(ContainerInterface $container, $requestedName, array $options = null) {
return new IndexController($container->get('Doctrine\ORM\EntityManager'));
}
}
당신은 배치 할 수 있습니다 모든 것이 적절히 구성되어 있다면 Factory 클래스를 어디서나 사용할 수 있습니다. 이 예에서는 /Module/yourModule/src/yourModule/Controller/Factory/IndexControllerFactory.php
에 입력했습니다. 지금
class IndexController extends AbstractActionController {
protected $em;
public function __construct(EntityManager $em) {
$this->em = $em;
}
public function indexAction() {
$repo = $this->em->getRepository('Entity\Categoria');
$categorias = $repo->findAll();
return new ViewModel(['categories'=>$categorias]);
}
...
}
레지스터 : 위의 클래스와
은
$em
변수는 채워 것이며 (:
$this->em
새 등록
$em
과 그 사용에주의) 컨트롤러 어디에서 호출 할 수 호출되는 당신 yourModule의
module.config.php
에 새로운 공장 우리는 완료 :
<?php
return [
// ... other stuff
// ...
'controllers' => [
'factories' => [
'yourModule\Controller\Index' => 'yourModule\Controller\Factory\IndexControllerFactory',
],
],
// etc...
];
// end of file
매우 중요 : 파일 것이다 아마 하 비슷한 내용이지만 "호출"을 배열 키로 사용합니다.의존성이나 정규 컨트롤러가없는 클래스의 경우 "invokes"대신 팩터 리을 키 이름으로 사용하게됩니다 (컨트롤러 팩터 리를 선언하기 때문에).
또한이 Migration guide for Zend Framework 3을 공부하는 것이 좋습니다. 중요한 정보가 많습니다.
그 과정에서 다음과 같이 다시 PHP를 호환 버전으로 다운 그레이드하는 것이 좋습니다 (작곡가를 사용하는 경우 매우 간단). 또는 웹에서 다른 최신 코스 나 자습서를 찾으십시오. . ZF2가 버전과 기회 사이에 크게 바뀌 었습니다. 이것이 유일한 오류는 아니며, 학습하는 대신 매우 혼란 스러울 것입니다. 이게 효과가 있는지 알려주세요.
하지만 "IndexController"파일에서이 클래스 팩토리를 수행합니까? –
오늘 (더 구체적으로 귀하의 사례와 관련하여) 더 나은 예를 추가하고 파일 및 구성을 넣을 위치와 같은 정보를 다시 한 번 읽으십시오. 당신은 당신이 가지고있는 버전을 말하지 않았으므로 이것은 ZF3.0을위한 것입니다 (이전 2.x 버전에서는 작동하지 않습니다). 모든 것을 지키면 문제가 해결됩니다. 희망이 도움이됩니다! – Fractalizer