PHP-构造函数注入的DI寄存器实例
PHP-DI Register Instance for ctor Injection
我正在使用 php-di 并在我的项目中使用 twig。我想用 php-di 注册 $twig 的实例,以便它的实例被注入到需要它的对象的 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();
我正在使用 php-di 并在我的项目中使用 twig。我想用 php-di 注册 $twig 的实例,以便它的实例被注入到需要它的对象的 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();