我正在尝试在Zend Framework项目中实现依赖注入。
在以前基于APS.NET的项目中,我们使用了StructureMap并覆盖了DefaultControllerFactory
以将依赖项注入控制器。
我不确定在Zend Framework中注入的位置?我查看了Zend_Controller_Plugin_Abstract
和Zend_Controller_Action_Helper_Abstract
,但似乎没有一个能够让我注入当前实例化的控制器。
我希望能够像在ASP.NET中那样注入当前控制器的构造函数,但是setter是可以接受的(我猜)。
关于如何实现这个或类似的任何想法?
最终,我希望能够做到这样的事情:
MyController extends Zend_Controller_Action {
// private vars
[...]
public function __constructor($authenticationService, $userRepository) {
$this->_authServ = $authenticationService;
$this->_userRepo = $userRepository;
}
}
我想做类似于stuctureMap的事情:
For(authenticationService).Use(WhatEverClass);
或者也许:
$currentController->authServ = $authenticationService;
$currentController->userRepo = $userRepository;
简而言之:我们在哪里可以拦截当前控制器的创建(或获取实例)?
类似(未答复)的问题here
谢谢! /乔恩
答案 0 :(得分:4)
Zend Framework首席开发人员Matthew Weier O'Phinney有一篇帖子似乎解决了向控制器注入资源的想法:
答案 1 :(得分:1)
还查看PHP-DI,这是一个与Zend Framework集成的依赖注入库。它适用于注释。
它使您能够执行以下操作:
MyController extends Zend_Controller_Action {
/**
* @Inject
* @var MyService
*/
private $myService;
public function helloAction() {
return $this->myService->sayHello();
}
}