web-dev-qa-db-ja.com

hook_uninstallでブロックを削除する方法?

mymodule_install()にカスタムブロックblock_testおよびblock_test2を作成するカスタムモジュールmymoduleがあります。

モジュールがアンインストールされたら、mymoduleによって作成されたブロックを削除したいと思います。アンインストールされるモジュールによって生成されたブロックを削除するにはどうすればよいですか?

drushコマンド(ローカル開発):

drush pmu mymodule -yv

mymodule.uninstall()

function mymodule_uninstall() {
  // Delete Blocks generated by module.

  /** @var \Drupal\Core\Entity\EntityStorageInterface $block_storage */
  $block_storage = \Drupal::service('entity_type.manager')->getStorage('block');
  /** @var \Drupal\block\Entity\Block[] $blocks */
  $blocks = $block_storage->loadMultiple();
  foreach ($blocks as $block) {
    // I am stuck here. 
  }
}
1
usernameabc

はい、次に、上記の強制された構成依存関係の部分に従うのが最善です。固定されたuuidを使用してコンテンツブロックを作成する場合は、ブロック構成エンティティをconfig/installフォルダーに配置し、構成依存関係をそこに記述します。自動的にアンインストールされます。

少なくとも構成エンティティ。block_contentエンティティも削除する場合は、$block_content = \Drupal::service('entity.repository')->loadEntityByUuid('block_content', 'YOUR_UUID'); $block_content->delete()を使用してUUIDでロードします。

0
Berdir