Я использую 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 вместо использования уже созданного экземпляра.
Это все правильно, за исключением метода, который вы вызываете для создания контейнера:
$container = $builder->buildDevContainer();
Это создает совершенно новый контейнер и игнорирует то, что вы настроили выше;) (на самом деле это статический метод, который вы можете использовать для создания нового контейнера очень легко, например так: $container = ContainerBuilder::buildDevContainer();
).
Вы должны использовать вместо:
$container = $builder->build();
Других решений пока нет …