【问题标题】:Automatically inject resources into controller自动将资源注入控制器
【发布时间】:2012-12-04 07:05:10
【问题描述】:

我正在尝试在 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-framework dependency-injection


    【解决方案1】:

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

    A Simple Resource Injector for ZF Action Controllers

    【讨论】:

    • 非常感谢!这与我正在寻找的非常相似,非常有用。
    【解决方案2】:

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

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

    MyController extends Zend_Controller_Action {
        /**
         * @Inject
         * @var MyService
         */
        private $myService;
    
        public function helloAction() {
            return $this->myService->sayHello();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2013-12-05
      • 2018-05-17
      • 2013-12-25
      • 2016-01-28
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2011-11-16
      • 1970-01-01
      相关资源
      最近更新 更多