我正在尝试将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))
这意味着,您将通过使用给定的参数调用工厂方法来创建服务。