自动将资源注入控制器

时间:2011-08-04 02:54:24

标签: zend-framework dependency-injection

我正在尝试在Zend Framework项目中实现依赖注入。

在以前基于APS.NET的项目中,我们使用了StructureMap并覆盖了DefaultControllerFactory以将依赖项注入控制器。

我不确定在Zend Framework中注入的位置?我查看了Zend_Controller_Plugin_AbstractZend_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

谢谢! /乔恩

2 个答案:

答案 0 :(得分:4)

Zend Framework首席开发人员Matthew Weier O'Phinney有一篇帖子似乎解决了向控制器注入资源的想法:

A Simple Resource Injector for ZF Action Controllers

答案 1 :(得分:1)

还查看PHP-DI,这是一个与Zend Framework集成的依赖注入库。它适用于注释。

它使您能够执行以下操作:

MyController extends Zend_Controller_Action {
    /**
     * @Inject
     * @var MyService
     */
    private $myService;

    public function helloAction() {
        return $this->myService->sayHello();
    }
}