PHP-DI Symfony Bridge 是如何工作的,以及如何正确设置它?



我在让PHP-DI 6和Symfony 4组合工作时遇到了一些问题。所以我想更深入地了解它是如何工作的/应该工作的,并检查我是否真的正确配置了它。

Symfony默认使用自己的DI容器,symfony/dependency-injection。在AppKernel有一个"钩子"方法configureContainer(...).在这种方法中,可以配置 DIC。DIC配置的另一个地方是services.yaml

现在我安装了php-di/php-diphp-di/symfony-bridge,并在 PHP-DI 文档中进行了AppKernel#buildPHPDIContainer(...)设置:

/*
Cannot use ContainerBuilder as in the PHP-DI docu,
since its already in use by the AppKernelconfigureContainer(...).
*/
use DIContainerBuilder as PhpDiContainerBuilder;
class AppKernel extends DIBridgeSymfonyKernel
{
// ...
protected function buildPHPDIContainer(PhpDiContainerBuilder $builder)
{
$builder->addDefinitions('/path/to/file/returning/definitions/array.php');
return $builder->build();
}
}

理论部分:

之后会发生什么/应该发生什么?Symfony DIC会变得不活跃吗?如果不是,是否意味着应用程序同时使用两个 DIC?禁用Symfony的DIC有意义吗?

总的来说:PHP-DI Symfony Bridge 的想法/方法是什么——取代框架的 DIC 或将自身集成到其中?

实践部分:

我在上面描述了让PHP-DI与Symfony一起工作的设置步骤。还有什么可做的吗?例如,AppKernelconfigureContainer(...)应该保持原样还是应该成为 PHP-DIAppKernelbuildPHPDIContainer(...)的代理?是否应该删除services.yaml

之后会发生什么/应该发生什么?

PHP-DI Symfony Bridge 的想法/方法是什么——替换框架的 DIC 或将自身集成到其中?

SymfonyContainerBridge取代了Symfony容器。这个"桥"是PHP-DI和Symfony DI的代理:如果在Symfony的DI容器中找到一个条目,它会返回它,否则它会在PHP-DI内部查找。

Symfony DIC会变得不活跃吗?

不。

如果不是,是否意味着应用程序同时使用两个 DIC?

是的。

禁用Symfony的DIC有意义吗?

并不是真的,因为Symfony中的很多东西都只能归功于Symfony的DI容器的配置。

还有什么可做的吗?

如果您已按照文档中描述的步骤进行操作,则无需执行其他操作。

至于你的另一个问题,我昨天已经发布了答案。

相关内容

  • 没有找到相关文章

最新更新