How do I stop a module from installing optional configuration, or make sure it's installed by the time I want to remove it myself?
-
21-01-2021 - |
Question
I don't want the "Frontpage" view to be installed along with my installation profile.
I tried adding a hook_install
to a module which does this:
\Drupal::entityTypeManager()->getStorage('view')
->load('frontpage')
->setStatus(FALSE)
->save();
But during installation that tells me that the frontpage view doesn't exist when my module is being installed. Fair enough, so I added the module that owns the frontpage view config (core node) to my dependencies:
dependencies:
...
- drupal:node
Still didn't work. Then I realised it's optional config; maybe the module responsible for processing that config (core views) also needs to be a dependency. It would make sense, so my dependencies became:
dependencies:
...
- drupal:node
- drupal:views
Still didn't work, same problem - the View simply doesn't exist yet, so it can't be deleted.
So two halves of the same question:
- How do I stop this config from ever having been installed in the first place (or installed but initially disabled)?
- If that's not possible, what dependencies do I need to provide to ensure that the View in question is installed by the time my own
hook_install
is executed, so I can remove/disable it myself?
Solution
Hmm, have you tried in the .profile file an hook_install_tasks?
Or maybe with the hook_install_tasks_alter.
/**
* Implements hook_install_tasks_alter().
*/
function MODULE_install_tasks_alter(array &$tasks, array $install_state) {
$tasks['install_finished']['function'] = 'CALLBACK_post_install';
}
And deactivate the view in the callback.