thecodingmachine/drupal-service-provider-bridge

此Drupal 8模块提供了一个桥梁,以便将container-interop/service-provider服务提供者包含到您的Drupal项目中。

0.3.x-dev 2016-12-15 21:43 UTC

This package is auto-updated.

Last update: 2024-09-07 00:12:20 UTC


README

将定义在 container-interop 中的 service-provider 导入到Drupal 8项目中。

用法

安装

使用Composer安装包

composer require thecodingmachine/drupal-service-provider-bridge

转到Drupal管理面板,到“扩展”页面,并启用“服务提供者集成”模块。

Puli修复

目前存在Puli加载的问题。要修复它,在项目根目录中创建一个 load_puli.php 文件

load_puli.php

<?php
if (file_exists(__DIR__.'/.puli/GeneratedPuliFactory.php')) {
    require_once __DIR__.'/.puli/GeneratedPuliFactory.php';
}

现在,转到您的项目 composer.json 文件,并在 autoload 部分中添加

{
    "autoload": {
        "files": [
            "load_puli.php"
        ]
    },
}

使用Puli的用法

桥梁包将使用Puli自动发现您项目的服务提供者。如果您加载的服务提供者在Puli上进行了发布,那么您就完成了。服务提供者中声明的服务现在在Symfony容器中可用!

使用手动声明的方式

如果您正在使用的服务提供者没有使用Puli进行发布,您将需要手动声明它。为此,在项目Web根目录中打开一个 service-providers.php 文件,并返回您想要导入的服务提供者列表

service-providers.php

return [
    'service-providers' => [
        'My\\Project\\Di\\MyServiceProvider',
        'My\\Project\\Di\\MyOtherServiceProvider',
    ]
];

禁用Puli发现

您可以通过在 service-providers.php 文件中传递 'puli' => false 来禁用Puli发现

service-providers.php

return [
    'service-providers' => [
        'My\\Project\\Di\\MyServiceProvider',
        'My\\Project\\Di\\MyOtherServiceProvider',
    ],
    'puli' => false
];

注意:除了返回完全限定的类名外,您还可以在数组中放置服务提供者的实例。

已知限制

Drupal 8容器只接受 小写标识符

由于服务提供者可以为服务提供任何类型的标识符(大小写均可),因此此桥梁系统地将标识符转换为小写。

这可能会导致错误,如果您有两个服务具有不同大小写但名称相同(但老实说,如果您遇到这个问题,您应该重新考虑您设计服务提供者的方式 :) )

默认别名

默认情况下,此包将创建以下条目

  • Psr\Log\LoggerInterface => 映射到 logger.channel.default
  • puli_factory => Puli工厂
  • puli_repository => Puli仓库
  • puli_discovery => Puli发现服务

工作原理

在幕后,此Drupal 8模块在很大程度上依赖于Symfony <=> 服务提供者桥梁包。事实上,Drupal 8容器是基于Symfony容器的一个高度修改过的容器。因此,此模块是Symfony桥梁的一系列适配。