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.
}
}
はい、次に、上記の強制された構成依存関係の部分に従うのが最善です。固定されたuuidを使用してコンテンツブロックを作成する場合は、ブロック構成エンティティをconfig/installフォルダーに配置し、構成依存関係をそこに記述します。自動的にアンインストールされます。
少なくとも構成エンティティ。block_contentエンティティも削除する場合は、$block_content = \Drupal::service('entity.repository')->loadEntityByUuid('block_content', 'YOUR_UUID'); $block_content->delete()
を使用してUUIDでロードします。