自动注入资源到控制器

问题描述:

我想在我们的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

谢谢! /乔恩

Zend框架的主要开发人员马修·威尔O'Phinney有似乎为解决资源注入到控制器中的想法后:

A Simple Resource Injector for ZF Action Controllers

+0

非常感谢!这与我所寻找的非常相似,非常有用。 –

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

它能让你在做这样的事情:

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

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