Definition :: addMethodCall Не вызывает метод set - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь обновить Symfony с 2.3 до 3.4. На данный момент я пытаюсь решить проблему с инъекцией зависимости. Похоже, старая версия класса DependencyInjection\Definition вызывала бы метод Factory, когда была установлена ​​фабрика, но это изменилось?

Я пытался использовать это руководство для обновления кода: https://gist.github.com/mickaelandrieu/5211d0047e7a6fbff925#dependencyinjection. Но я считаю, что поведение класса изменилось.

Итак, это оригинальный код:

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

, который вызывает этот метод:

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

Я обновил тело метода следующим образом:

$def = new \Symfony\Component\DependencyInjection\Definition("Zend_Config");
$def->setFactory(__CLASS__);
$def->addMethodCall('valueFactory', [$this->_configPath]);
return $def;

Я ожидал, что код вызовет функцию valueFactory, но эта функция никогда не вызывается. Это может быть потому, что старый код не имеет контейнера? Я не уверен

1 Ответ

0 голосов
/ 10 апреля 2019

Метод setFactory ожидает вызова, а не просто класс.addMethodCall будет вызывать функцию для самой службы, а не для его фабрики.

То, что вы хотите сделать, это:

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

Это означает, что вы создадите службу, вызвавфабричный метод с заданными аргументами.

...