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

时间:2018-03-19 19:57:44

标签: symfony dependency-injection symfony4 php-di

我有some problems获得PHP-DI 6& Symfony 4组合工作。所以我想更深入地了解它是如何工作/应该工作并检查我是否真的正确配置它。

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

现在我安装了php-di/php-diphp-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

1 个答案:

答案 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