2011-08-04 44 views
3

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

謝謝! /喬恩

回答

1

退房也PHP-DI,這是一個依賴注入與Zend Framework集成的庫。它適用於註釋。

它能讓你在做這樣的事情:

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

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