gpt4 book ai didi

php - ZF2 依赖注入(inject)别名和多个实例

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

我们目前正在 Zend Framework 2 中编写一个模块。

我很难找到关于此的文档,但我知道这是可能的。

我在层次结构中有 3 个类,我想通过依赖注入(inject)来设置它们。我们称这些类为; A 类、B 类和 C 类。

ClassA 包含一个 ClassB 实例数组,ClassB 包含一个 ClassC 实例数组。 ClassB 的每个实例都应使用不同的参数进行实例化。这同样适用于ClassC。所有 3 个类的参数都通过构造函数传入(如果需要,也可以使用 setter 处理。)。

<?php
class ClassA {
protected $arrClassBInstances = array();

public function __construct( $arrClassBInstances ) {
$this->arrClassBInstances = $arrClassBInstances;
}
}

class ClassB {
protected $arrClassCInstances = array();
protected $someOtherParam = "";

public function __construct( $arrClassCInstances, $someOtherParam ) {
$this->arrClassBInstances = $arrClassCInstances;
$this->someOtherParam = $someOtherParam;

}
}

class ClassC {
protected $someParam = "";

public function __construct( $someParam ) {
$this->someParam = $someParam;
}
}

所以它们是我的问题的两个部分。首先,如何配置注入(inject)不同参数的同一类的多个实例?例如,多个 ClassB 实例,每个实例都有自己的 ClassC 实例子集。 ZF2 DiC 中必须有某种别名。

其次,我如何将一组重新配置依赖项注入(inject)到一个类中。例如,如何将 ClassB 实例数组注入(inject) ClassA?

如果可能,请给我提供一个直接使用 DiC 的示例,以及在 module.config.php 的 DI 部分中实现此目的的示例。

最佳答案

来自documentation ,我认为这应该有效:

// $event instance of \Zend\Mvc\MvcEvent
$di = $event->getTarget()->getLocator();
$paramsForA = array(
$di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
$di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>1)),
$di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>2)),
))),
$di->get('qualified_namespaces_or_di_alias_for_b', array('arrClassCInstances'=>array(
$di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>3)),
$di->get('qualified_namespaces_or_di_alias_for_c', array('someParam'=>4)),
))),
);
$classA = $di->get('qualified_namespaces_or_di_alias_for_a', array('arrClassBInstances'=>$paramsForA));

您可以使用DI 别名完全限定 namespace 作为$di->get() 的第一个参数

关于php - ZF2 依赖注入(inject)别名和多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10173171/

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