自动注入资源到控制器
问题描述:
我想在我们的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
谢谢! /乔恩
答
Zend框架的主要开发人员马修·威尔O'Phinney有似乎为解决资源注入到控制器中的想法后:
答
退房也PHP-DI,这是一个依赖注入与Zend Framework集成的库。它适用于注释。
它能让你在做这样的事情:
MyController extends Zend_Controller_Action {
/**
* @Inject
* @var MyService
*/
private $myService;
public function helloAction() {
return $this->myService->sayHello();
}
}
非常感谢!这与我所寻找的非常相似,非常有用。 –