我在让PHP-DI 6和Symfony 4组合工作时遇到了一些问题。所以我想更深入地了解它是如何工作的/应该工作的,并检查我是否真的正确配置了它。
Symfony默认使用自己的DI容器,symfony/dependency-injection
。在AppKernel
有一个"钩子"方法configureContainer(...)
.在这种方法中,可以配置 DIC。DIC配置的另一个地方是services.yaml
。
现在我安装了php-di/php-di
和php-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容器的配置。
还有什么可做的吗?
如果您已按照文档中描述的步骤进行操作,则无需执行其他操作。
至于你的另一个问题,我昨天已经发布了答案。