Недопустимая реализация mymodule form alter была добавлена модулем hook, реализующим alter
Я пытаюсь изменить функции своего модуля menu_ui
. Изменение веса моего модуля не помогло, и я прочитал, что hook_module_implements_alter
- это правильный путь. Итак, как описано здесь Я добавляю свой модуль в конец реализаций:
/**
* Implements hook_module_implements_alter.
*/
function mymodule_module_implements_alter(&$implementations, $hook) {
if ('form_alter' == $hook) {
$group = $implementations['mecca_hierarchy_access'];
unset($implementations['mecca_hierarchy_access']);
$implementations['mecca_hierarchy_access'] = $group;
}
}
Но это просто бросает:
Неперехваченное исключение PHP RuntimeException: "Недопустимая реализация mymodule_form_alter была добавлена hook_module_implements_alter()" в /path/to/core/lib/Drupal/Core/Extension/ModuleHandler.php строка 591
Изменение моей формы выглядит так:
function mymodule_form_node_form_alter(&$form, FormStateInterface $form_state) {
// commented code
}
Что я делаю не так?
1 answers
Исключение возникает из следующего кода. (См. ModuleHandler::buildImplementationInfo()
.)
// If a new implementation was added, verify that the function exists.
if (!function_exists($module . '_' . $hook)) {
throw new \RuntimeException("An invalid implementation {$module}_{$hook} was added by hook_module_implements_alter()");
}
Это просто происходит потому, что в вашем случае нет никакого mecca_hierarchy_access_form_alter()
или подобного крючка, скорее всего, потому, что нет никакого модуля mecca_hierarchy_access.
Код, который вы хотите использовать, вероятно, следующий.
/**
* Implements hook_module_implements_alter().
*/
function mymodule_module_implements_alter(&$implementations, $hook) {
if ('form_alter' == $hook && isset($implementations['mymodule'])) {
$group = $implementations['mymodule'];
unset($implementations['mymodule']);
$implementations['mymodule'] = $group;
}
}
Всегда проверяйте, что реализация вашего модуля еще не была удалена из другого модуля, иначе ваша реализация крючка фактически установила бы $implementations['mymodule']
в NULL
.