0

通过使 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 文档中解释:

/*
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删除?

4

1 回答 1

1

之后会发生什么/应该发生什么?

PHP-DI Symfony Bridge 的想法/方法是什么——替换框架的 DIC 或将其自身集成到其中?

SymfonyContainerBridge替换 Symfony 容器。这个“桥”是 PHP-DI 和 Symfony DI 的代理:如果在 Symfony 的 DI 容器中找到一个条目,它会返回它,否则它会在 PHP-DI 中查找。

Symfony DIC 是否变为非活动状态?

不。

如果不是,是否意味着应用程序同时使用了两个 DIC?

是的。

禁用 Symfony 的 DIC 有意义吗?

不是真的,因为 Symfony 中的很多东西只能通过 Symfony 的 DI 容器的配置才能工作。

还有其他事情要做吗?

如果您已按照文档中描述的步骤进行操作,则无需执行其他操作。

至于你的另一个问题,我昨天已经发布了答案

于 2018-03-20T14:41:33.620 回答