thecodingmachine / drupal-service-provider-bridge
此Drupal 8模块提供了一个桥梁,以便将container-interop/service-provider服务提供者包含到您的Drupal项目中。
Requires
- php: >=7.0
- drupal/core: ~8.0
- thecodingmachine/service-provider-bridge-bundle: ^0.3
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桥梁的一系列适配。