【发布时间】:2018-03-19 19:57:44
【问题描述】:
通过使 PHP-DI 6 和 Symfony 4 组合工作,我得到了 some problems。所以我想更深入地了解它是如何工作/应该工作的,并检查我是否真的正确配置了它。
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 docu 中所述:
/*
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 应该被删除吗?
【问题讨论】:
标签: symfony dependency-injection symfony4 php-di