Перезапуск hook_update и hook_post_update

08.05.2021

Периодчиски на проектах мы сталкиваемся с тем, что надо написать хук апдейт или хук пост апдейт. И конечно появляется необходимость перезапустить хуки обновлений при разработки.

Перезапуск hook_update

Для перезапуска хук апдейта достаточно вызвать команду для обновления версии модуля.  а если вы используете драш в своих проектах то это просто одна команда

drush eval `drupal_set_installed_schema_version('demo_test', 8000);`

Перезапуск hook_post_update

С данных хуком не получиться сбросить только версию модуля.  Необходимо удалить запись о выполнении хука

$key_value = \Drupal::keyValue('post_update');
$update_list = $key_value->get('existing_updates');
$hook = 'demo_test_post_update_update_node';
$hook_key = array_search($hook, $update_list);
if ($hook_key === FALSE) {
  \Drupal::messenger()->addWarning('Hook not found');
}
else {
  unset($update_list[$hook_key]);
  $key_value->set('existing_updates', $update_list);
  \Drupal::messenger()->addStatus('Hook removed');
}

Код выше мы можем обернуть как отдельный скрипт. Например scripts/rerun.php.
Как обычно нам поможет драш. достаточно выполнить команду drush scr scripts/rerun.php

Важно

Не выполняйте перезапуск хуков в продакшене!