web-dev-qa-db-ja.com

インポート中に予期しないエラーが発生しました。 。 。 Drush設定のインポートでプラグインが存在しないエラー

これは、カスタムモジュールでプラグインを削除しようとしたときにたまにあった問題です。この例では、フィルター形式のフィルタープラグインを有効にすると、削除できなくなります。これを無効にしてプラグインクラスをコードベースから削除しても、 "filter.format.full_html.yml"設定に表示されます。

このファイルを編集して依存関係を削除してから、drush cimを実行しようとすると、エラーが発生します。

Unexpected error during import with operation update for filter.format.basic_html: The "examplefilter" plugin does not exist.

無効にしたときにこの依存関係が構成に表示され、プラグインが見つからないという致命的なエラーなしに構成から削除して構成をインポートできない場合、どうすればこの依存関係を取り除くことができますか?

3
oknate

これを更新フックで解決することができました。構成を削除してからこの方法で再インポートすると、予期しないエラーが発生しなくなります。これを機能させるには、まず「drush updb」を実行してから「drush cim」を実行する必要があります。

use Drupal\Core\Config\FileStorage;

/**
 * Reimport filter.format.full_html and filter.format.basic_html.
 *
 * This is to remove the dependency on the examplefilter filter
 * which is being deleted.
 */
function mymodule_update_8003() {

  $config_ids = [
    'filter.format.full_html',
    'filter.format.basic_html',
  ];

  foreach ($config_ids as $config_id) {
    Drupal::configFactory()
      ->getEditable($config_id)
      ->delete();

    $config_path = config_get_config_directory('sync');
    $source = new FileStorage($config_path);
    $config_storage = \Drupal::service('config.storage');
    $config_storage->write($config_id, $source->read($config_id));
  }
}
3
oknate