I want to be able to disable and then uninstall a module programmatically on my local environment and then easily push that code to prod so everything gets updated.
I'm guessing it's something with the hook_update_N
. But not sure where to start.
I want to be able to disable and then uninstall a module programmatically on my local environment and then easily push that code to prod so everything gets updated.
I'm guessing it's something with the hook_update_N
. But not sure where to start.
Think I found the answer! Within the modules .install file, I added this code:
/**
* Disable and uninstall the module.
*/
function MODULE_update_7200() {
if( module_exists('MODULE')) {
module_disable(array('MODULE'));
drupal_uninstall_modules(array('MODULE'));
}
}
The number in the function should reflect your drupal install. See how to number them here: http://api.drupal.org/api/drupal/modules%21system%21system.api.php/function/hook_update_N/7
In Drupal 8 this is only one step now.
To be placed inside MYMODULE.install
:
/**
* Uninstall Field UI.
*/
function MYMODULE_update_8001(&$sandbox) {
\Drupal::service('module_installer')->uninstall(['field_ui']);
}
In Drupal 8 you can use configuration API to enable and disable modules.
For example, if you want to enable devel module. You have to add following code to the core.extension.yml
devel: 0
If you want to uninstall you have to remove devel: 0
from the core.extension.yml
drush cex
. Then your step. And then step 3: re-import the config drush cim
. But actually that's not what OP is asking for. The question is: programmatically. –
Alike you can use drush and forcefully uninstall the module just like the following:
drush eval "\$module_data = \Drupal::config('core.extension')->get('module'); unset(\$module_data['MODULE_NAME']); \Drupal::configFactory()->getEditable('core.extension')->set('module', \$module_data)->save();"
© 2022 - 2024 — McMap. All rights reserved.