通过使 PHP-DI 6 和 Symfony 4 组合工作,我遇到了一些问题。所以我想更深入地了解它是如何工作的/应该如何工作并检查我是否真的正确配置了它。
Symfony 默认使用自己的 DI 容器,symfony/dependency-injection
. 在App\Kernel
里面有一个“钩子”的方法configureContainer(...)
。在这种方法中,可以配置 DIC。DIC 配置的另一个地方是services.yaml
.
现在我安装php-di/php-di
和php-di/symfony-bridge
设置它并在App\Kernel#buildPHPDIContainer(...)
PHP -DI 文档中解释:
/*
Cannot use ContainerBuilder as in the PHP-DI docu,
since its already in use by the AppKernel\configureContainer(...).
*/
use DI\ContainerBuilder as PhpDiContainerBuilder;
class AppKernel extends \DI\Bridge\Symfony\Kernel
{
// ...
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 一起工作的设置步骤。还有其他事情要做吗?例如,应该AppKernel\configureContainer(...)
保持原样还是应该成为 PHP-DI 的代理AppKernel\buildPHPDIContainer(...)
?是否应该services.yaml
删除?