php - 我如何在 ZF2 的 Zend\ServiceManager 中使用 Zend\Di?

标签 php dependency-injection zend-framework2

我正在尝试让 Zend\ServiceManager 使用 Zend\Di 来创建我的实例,因为我已经预先扫描并缓存了 DI 定义。我意识到这可能会降低速度,但另一方面,我需要编写更少的元代码。

ServiceManager documentation说是

the ServiceManager also provides optional ties to Zend\Di, allowing Di to act as an initializer or an abstract factory for the manager.

但是我没有找到任何关于如何让 ServiceManager 使用 Zend\Di 的例子。我什至不确定应该在哪里设置它,也许在 Module::getServiceConfig() 中?谁能提供一些示例代码?

最佳答案

以下对我有用。为了使 Zend\Di 与 Zend\ServiceManager 兼容,我从 Zend\Di\Di 扩展了一个类 MyLib\Di\Di,它实现了 AbstractFactoryInterface。

namespace MyLib\Di;
use Zend\ServiceManager\AbstractFactoryInterface; 
use Zend\ServiceManager\ServiceLocatorInterface;

class Di extends \Zend\Di\Di implements AbstractFactoryInterface
{
    public function canCreateServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return true;
    }

    public function createServiceWithName(ServiceLocatorInterface $serviceLocator, $name, $requestedName)
    {
        return $this->get($requestedName);
    }
}

现在,我可以使用 MyLib\Di\Di 作为 Zend\ServiceManager 的后备抽象工厂。这是我如何创建 IndexController 的示例。 IndexController 的依赖项(构造函数参数)会自动注入(inject)。

class Module
{
    ... 

    public function getServiceConfig()
    {        
        $this->di = new \MyLib\Di\Di;
        $this->configureDi($this->di); // Set up definitions and shared instances

        return array(
            'abstract_factories' => array($this->di),
        );
    }

    public function getControllerConfig()
    {
        return array(
            'factories' => array(
                'Survey\Controller\IndexController' => function() {
                    return $this->di->get('Survey\Controller\IndexController');
                },
            ),
        );
    }
}

关于php - 我如何在 ZF2 的 Zend\ServiceManager 中使用 Zend\Di?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13511594/

相关文章:

php - SQL 查询中的函数。是否可以?

javascript - Gulp-inject 说 "Nothing to inject into index.html"

javascript - 如何使用 ES6 类在 AngularJS Controller 中保持注入(inject)的依赖项私有(private)

javascript - 通过 JS 设置时 Bootstrap 输入验证消息不显示 php

javascript - 使用 PHP 脚本作为 React 应用程序的 'server'?

php - ZendFramework 2.0.0beta4 服务管理器配置-子键区别

php - 如何使用zf2向mysql插入数据?

php - 想象一下 ZF2 : Ratio Resize

javascript - 每次更改数据库下拉值时,文本框填充空值

java - 如果@ApplicationScope,CDI( Weld 3.0.3.Final)不会调用@PostConstruct