【问题标题】:How does PHP-DI Symfony Bridge work and how to set up it correctly?PHP-DI Symfony Bridge 如何工作以及如何正确设置它?
【发布时间】: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-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();
    }
}

理论部分:

之后会发生什么/应该发生什么? 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


    【解决方案1】:

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

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

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

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

    没有。

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

    是的。

    禁用 Symfony 的 DIC 有意义吗?

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

    还有其他事情要做吗?

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

    至于你的其他问题I've posted an answer yesterday

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-27
      • 2017-01-08
      • 2011-11-17
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2014-04-02
      • 2014-06-10
      相关资源
      最近更新 更多