これは、カスタムモジュールでプラグインを削除しようとしたときにたまにあった問題です。この例では、フィルター形式のフィルタープラグインを有効にすると、削除できなくなります。これを無効にしてプラグインクラスをコードベースから削除しても、 "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.
無効にしたときにこの依存関係が構成に表示され、プラグインが見つからないという致命的なエラーなしに構成から削除して構成をインポートできない場合、どうすればこの依存関係を取り除くことができますか?
これを更新フックで解決することができました。構成を削除してからこの方法で再インポートすると、予期しないエラーが発生しなくなります。これを機能させるには、まず「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));
}
}