vardot/module-installer-factory

1.0.3 2023-10-30 12:25 UTC

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();
  }
}