定义::addMethodCall 不调用 set 方法



我正在尝试将Symfony从2.3升级到3.4。目前,我正在尝试解决依赖注入的问题。似乎旧版本的 DependencyInjectionDefinition 类会在设置工厂时调用 Factory 方法,但这已经改变了吗?

我尝试使用此指南来升级代码:https://gist.github.com/mickaelandrieu/5211d0047e7a6fbff925#dependencyinjection。但是,我相信班级的行为已经改变。

所以这是原始代码:

public function getSymfonyValue()
{
    $def = new SymfonyComponentDependencyInjectionDefinition("Zend_Config");
    $def->setFactoryClass(__CLASS__);
    $def->setFactoryMethod('valueFactory');
    $def->addArgument($this->_configPath);
    return $def;
}

调用此方法:

public function valueFactory($configPath){
    ...
    return $value;
}

我已将方法的主体更新为:

$def = new SymfonyComponentDependencyInjectionDefinition("Zend_Config");
$def->setFactory(__CLASS__);
$def->addMethodCall('valueFactory', [$this->_configPath]);
return $def;

我希望代码valueFactory调用该函数,但该函数从未被调用。这可能是因为旧代码没有容器?我不确定

setFactory 方法需要一个可调用对象,而不仅仅是一个类。addMethodCall将在服务本身(而不是他的工厂(上调用函数。

您要做的是:

$def->setFactory(array(__CLASS__, 'valueFactory'))
$def->setArguments(array($this->_configPath))

这意味着,您将通过使用给定的参数调用工厂方法来创建服务。

最新更新