我有some problems获得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 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();
}
}
理论部分:
之后会发生什么/应该发生什么? Sympony DIC是否变为非活动状态?如果不是,这是否意味着应用程序同时使用两个DIC?禁用Symfony的DIC是否有意义?
一般来说:PHP-DI Symfony Bridge的想法/方法是什么 - 替换框架的DIC或集成本身?
实践部分:
我在上面描述了让PHP-DI与Symfony一起工作的设置步骤。还有别的事可做吗?例如。 AppKernel\configureContainer(...)
应该保持原样还是应该成为PHP-DI AppKernel\buildPHPDIContainer(...)
的代理?是否应删除services.yaml
?
答案 0 :(得分:1)
之后会发生什么/应该发生什么?
PHP-DI Symfony Bridge的想法/方法是什么 - 替换框架的DIC或将其自身集成到其中?
SymfonyContainerBridge
取代了Symfony容器。这个“桥”是PHP-DI和Symfony DI的代理:如果在Symfony的DI容器中找到一个条目,它会返回它,否则它会查看PHP-DI。
Sympony DIC是否变为非活动状态?
没有
如果不是,那是否意味着应用程序同时使用两个DIC?
是
禁用Symfony的DIC是否有意义?
不是因为Symfony的很多东西只能用于Symfony的DI容器的配置。
还有别的事吗?
如果您已按照文档中描述的步骤操作,则不应该执行其他操作。
至于你的另一个问题I've posted an answer yesterday。