gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-31 22:10:27 25 4
gpt4 key购买 nike

我正在尝试让 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com