如何在drupal 8中添加表单alter hook

时间:2017-08-03 13:45:16

标签: drupal-8

我对drupal 8非常陌生,我正在尝试更改自定义内容类型下的表单"问题"。表单有一个id" node-question-form"。

我已经设置了一个模块并试图添加hook_FORM_ID_alter()但它永远不会被调用。即使是最简单的钩子也不起作用。例如:

function constellator_form_alter(&$form, &$form_state, $form_id){
     echo "alter the form"; exit;
}

其中' constellator'是模块名称。

我从早上起就一直困扰着,没有什么对我有用,任何帮助都会受到极大的关注。

干杯

1 个答案:

答案 0 :(得分:2)

在创建表单时以及在屏幕上显示之前,会调用hook_form_alter()和hook_FORM_ID_alter()。
这些函数写在.module文件中 在编写任何挂钩功能之后,始终清除缓存。这使得Drupal明白已经声明了这样的功能 如果使用drush版本8,请使用drush cr,否则请点击管理 - > Drupal 8徽标 - >刷新所有缓存以清除缓存。 现在您可以检查是否正在调用该函数。 检查它的最佳方法是安装Devel模块,启用它。与Devel一起安装了Kint。也可以从管理界面启用Kint。 执行此操作后,您可以通过以下方式检查是否正在调用挂钩:

function constellator_form_alter(&$form, &$form_state, $form_id){
     kint($form);
}

这将打印页面中所有表单的所有表单变量。 如果您想要在页面中定位特定表单,例如。你形成,节点问题形式,类型:

function node_question_form_form_alter(&$form, &$form_state, $form_id){
     kint($form);
}

使用echo,您可以通过查看页面的源代码,然后使用某些搜索选项搜索已回显的文本来确认是否正在调用该函数,没有任何麻烦浏览器,例如 Ctrl + f ,以防谷歌浏览器。