Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drupal hook_form_alter()和hook_prepare()的区别_Drupal_Drupal 7 - Fatal编程技术网

Drupal hook_form_alter()和hook_prepare()的区别

Drupal hook_form_alter()和hook_prepare()的区别,drupal,drupal-7,Drupal,Drupal 7,我对Drupal相当陌生 我遇到了两种预填充表单的方法,即和 我读过这些文件,我相信这两种方法都能达到我的目的 我想知道创建这两个函数的目的是什么?是否有一个是为指定的功能或左右 据我所知,hook_form_alter()接受当前的表单状态,并对其进行操作。这是否意味着此函数是为了改变实际形式本身?比如更改某些字段,或者添加自定义字段等等 另一方面,Hook_prepare()在填充添加/编辑表单之前获取一个节点并对其进行操作 假设我正在尝试预填充表单。hook_prepare()是“正确”的

我对Drupal相当陌生

我遇到了两种预填充表单的方法,即和

我读过这些文件,我相信这两种方法都能达到我的目的

我想知道创建这两个函数的目的是什么?是否有一个是为指定的功能或左右

据我所知,hook_form_alter()接受当前的表单状态,并对其进行操作。这是否意味着此函数是为了改变实际形式本身?比如更改某些字段,或者添加自定义字段等等

另一方面,Hook_prepare()在填充添加/编辑表单之前获取一个节点并对其进行操作


假设我正在尝试预填充表单。hook_prepare()是“正确”的方法吗?还是真的没关系?如果我使用的是webform模块,而不是内容类型呢?

这两个钩子完全不同,它们做的事情根本不一样

每当使用
drupal\u get\u form()
构建表单时,就会调用
hook\u form\u alter()
。它允许模块以结构化的方式更改与表单相关的元素或元数据(操作字段属性、添加AJAX、添加CSS属性等)。钩子是为实现它的任何模块调用的

相反,
hook\u prepare()
用于在节点对象被传递到实体表单进行添加/编辑之前对其进行操作。它仅对定义正在准备的节点类型的模块调用。因此,除非您定义了已知的自定义“节点类型模块”,否则不会调用此钩子

简而言之,99%的时间你会使用
hook\u form\u alter()
hook_prepare()
仅在一组非常特定的情况下才会出现,如果您使用的是Webform模块,则不适用于您的情况