vardot / module-installer-factory
模块安装器工厂
1.0.3
2023-10-30 12:25 UTC
Requires
- drupal/core: ~9 || ~10
This package is auto-updated.
Last update: 2024-09-17 18:44:17 UTC
README
为开发者提供模块安装器工厂的类。
此类与具有任何模块键的 module_name.info.yml
文件一起工作。
例如,让我们在 install
键下创建一个 module_name.info.yml
,如下所示
name: "Module Name"
description: "Module description."
type: module
core_version_requirement: ^9
dependencies:
- drupal:node
- drupal:editor
- drupal:ckeditor
- drupal:filter
install:
- extlink
- linkit
- anchor_link
这样,在不禁用使用模块的情况下,可以在某些项目中禁用已安装的模块。
它只安装,不是依赖项。
如何使用模块安装器工厂类
1. 在您的根 composer.json 文件中要求该包
"vardot/module-installer-factory": "~1.0"
或者通过命令在您的项目中要求该包
$ composer require vardot/module-installer-factory:~1.0
2. 添加所需命名空间
在自定义模块或自定义安装配置文件中添加以下命名空间。
use Vardot\Installer\ModuleInstallerFactory;
在您的自定义安装事件中使用以下方法
安装模块列表
在 varbase_core.info.yml 中安装模块列表
ModuleInstallerFactory::installList('varbase_core');
installList 方法的参数**:
String
$moduleName: 模块的机器名称。String
$modulesListKey: 可选的列表键,用于从其中获取模块列表。默认 'install'。在管理情况下可以更改(管理、当_module_name启用)Boolean
$setModuleWeight: 一个标志,用于在安装模块列表后自动设置模块的权重。
相当于
ModuleInstallerFactory::installList('varbase_core', 'install', TRUE);
在安装模块列表后设置模块的权重
确保任何钩子或事件订阅者在使用所有模块后工作。
ModuleInstallerFactory::setModuleWeightAfterInstallation('varbase_core', 'install');
setModuleWeightAfterInstallation 方法的参数**:
String
$moduleName: 模块的机器名称。String
$modulesListKey: 可选的列表键,用于从其中获取模块列表。默认Array
$modules: 可选的模块数组。
用选定的模块集合设置列表中模块的权重,例如:如果 varbase_core.info.yml
文件有
set_weight_after:
- ctools
- token
- block_class
即使模块没有启用它们。
ModuleInstallerFactory::setModuleWeightAfterInstallation('varbase_core', 'set_weight_after');
也可以按如下方式作为数组传递
ModuleInstallerFactory::setModuleWeightAfterInstallation('varbase_core', '', ['ctools', 'token', 'block_class']);
在此点,任何钩子或事件订阅者都将处理列表中列出的模块。
从扫描的目录导入配置
示例 1:导入所有字段存储配置
ModuleInstallerFactory::importConfigsFromScanedDirectory('varbase_core', '/^field.storage.*\\.(yml)$/i', 'config/optional');
示例 2:从模块中的管理文件夹导入所有自定义设置文件。
ModuleInstallerFactory::importConfigsFromScanedDirectory('varbase_security', '/^.*(settings.yml)$/i', 'config/managed');
从配置文件数组列表导入配置
示例 1:从管理配置文件夹导入配置
ModuleInstallerFactory::importConfigsFromList('varbase_admin',
[
'views.view.content',
'views.view.user_admin_people',
],
'config/managed');
importConfigsFromList 方法的参数**:
String
$moduleName: 模块的机器名称。Array
$listOfConfigFiles: 配置文件列表。String
$configDirectory: 要部分导入列表的配置目录。
它可以用在一些情况下,例如改变多语言站点的内容或人员的默认视图,或通过其他模块添加额外的筛选器。管理 组装组件和安装
安装步骤非常重要。
示例 2:使用配置导入
有一个禁用模块的自定义配置,这个模块将随着开发和部署而被多次启用和禁用,但它们需要在默认设置或使用的模块的配置上做出基本的额外更改。
/**
* Implements hook_modules_installed().
*/
function varbase_security_modules_installed($modules, $is_syncing) {
if (in_array('security_review', $modules)) {
// The module will be Enabled and Disabled many times
// with development and deployments to production sites.
// But the need to have the basic extra change for config over
// the Security Review default configs.
// -------------------------------------------------
// Managed configs for the Security Review module.
$managed_configs = [
'security_review.settings',
'security_review.check.security_review-admin_permissions',
'security_review.check.security_review-error_reporting',
'security_review.check.security_review-executable_php',
'security_review.check.security_review-failed_logins',
'security_review.check.security_review-field',
'security_review.check.security_review-file_perms',
'security_review.check.security_review-input_formats',
'security_review.check.security_review-private_files',
'security_review.check.security_review-query_errors',
'security_review.check.security_review-temporary_files',
'security_review.check.security_review-trusted_hosts',
'security_review.check.security_review-upload_extensions',
'security_review.check.security_review-views_access',
];
// Import managed configs to the site active configs.
ModuleInstallerFactory::importConfigsFromList('varbase_security', $managed_configs, 'config/managed/security_review');
// Entity updates to clear up any mismatched entity and/or field definitions
// And Fix changes were detected in the entity type and field definitions.
\Drupal::classResolver()
->getInstanceFromDefinition(EntityDefinitionUpdateManager::class)
->applyUpdates();
}
}