Экземпляр регистра PHP-DI для инъекции ctor

Я использую php-di и использую веточку в своем проекте. Я хотел бы зарегистрировать экземпляр $ twig в php-di, чтобы его экземпляр вводился в аргумент ctor для объектов, где это необходимо. Я хотел бы использовать определения PHP и избежать аннотаций phpdoc, и прочитал это http://php-di.org/doc/php-definitions.html

Вот мой основной пример:

$builder = new ContainerBuilder();
$builder->addDefinitions(['Twig_Environment' => $twig]);
$container = $builder->buildDevContainer();

Тогда у меня есть $ twig в качестве аргумента ctor в некоторых других классах. Это вообще возможно? Чтобы было ясно, я не хочу создавать определение для каждого объекта, который использует $ twig.

public function __construct(\Twig_Environment $twig)
{
$twig->render('homepage.twig');
}

Полученная ошибка указывает на то, что php-di пытается создать новый экземпляр Twig_Environment вместо использования уже созданного экземпляра.

1

Решение

Это все правильно, за исключением метода, который вы вызываете для создания контейнера:

$container = $builder->buildDevContainer();

Это создает совершенно новый контейнер и игнорирует то, что вы настроили выше;) (на самом деле это статический метод, который вы можете использовать для создания нового контейнера очень легко, например так: $container = ContainerBuilder::buildDevContainer();).

Вы должны использовать вместо:

$container = $builder->build();
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]