Drupal:在 Webform 中添加自定义验证





5.00/5 (1投票)
Drupal:在 Webform 中添加自定义验证
使用 Webform 模块,我们可以轻松地在 Drupal 中创建任何表单。使用 Webform 验证模块,我们可以添加一些预构建的验证,例如最大长度、最小长度、禁用词列表、正则表达式、特定值等。但这些还不够,有时我们需要一些自定义验证来限制 Webform。在这篇博文中,我将逐步介绍如何在 Webform 中添加自定义验证。
要在 Webform 中添加自定义验证,您需要创建一个自定义模块。不要害怕听到“自定义模块”,这非常简单,只需按照以下步骤操作即可。
创建自定义模块并添加验证
步骤 1
创建模块目录:转到您网站的模块目录,即 *sites/all/modules*,并创建一个名为“custom”的目录,然后在“custom”目录中创建另一个名为“custom_validation”的目录。因此,您的自定义模块的最终路径是 *sites/all/modules/custom/custom_validation*。
第二步
必要的文件:要创建任何自定义模块,至少需要两个文件,即“custom_validation.info”和“custom_validation.module”文件,文件扩展名将是 * .info* 和 * .module*,而不是 * .php* 或 * .txt*。因此,在自定义模块目录(custom_validation)中创建这两个文件。
步骤 3
.info 文件的结构:.info 文件是您的自定义模块的配置文件。.info 文件中的每一行都是一个键值对,键在左侧,值在右侧,之间用“等号”分隔(例如 name = custom_validation)。分号用于注释掉一行。“Name
”和“Core
”键是任何模块所必需的。
;@file: custom_validation.info
;@author: Tanmay Maity
name = Custom Validation
description = Custom module for check the validation for Webform.
package = Custom
core = 7.x
步骤 4
.module 文件的用途:文件的所有内容都将包含在 PHP 标签()中。在这个文件中,我们将使用必要的钩子。在此文件中使用“
hook_form_alter()
”来添加与 Webform 相关的验证。此钩子在表单渲染之前执行。在钩子函数内部,检查表单 ID。
function custom_validation_form_alter(&$form, &$form_state, $form_id) {
// Check the form id
if($form_id == 'webform_client_form_4003') {
$form['#validate'][] = 'custom_validate_function';
}
}
- 钩子的参数包含表单的所有信息。如果您的 Webform 位于“……./node/4003”,则表单 ID 将是“
webform_client_form_4003
”。您可以回显$form_id
来检查它的值。 - 如果表单 ID 匹配,则使用
$form
参数添加自定义验证。“custom_validate_function
”是函数名称,您将在函数中检查所有验证。
步骤 5
验证函数:现在一切都已设置好,在 .module 文件中编写验证函数。使用函数参数 $form
和 &$form_state
获取表单字段值并设置验证消息。
使用 &$form_state
获取任何字段值,“name
”是字段的唯一键。
$form_state['values']['submitted']['name']
使用 $form
在任何字段中设置错误,它将显示错误消息并突出显示该字段。$message
将是要显示的的消息。
form_error($form['submitted']['name'],$message);
Validation
函数示例
function custom_validate_function($form, &$form_state) {
if(isset($form_state['values']['submitted']['name'])) {
$name = $form_state['values']['submitted']['name'];
if( condition ) {
$message = ‘Write any message’;
form_error($form['submitted']['name'], $message);
}
}
}
警告: 在“isset
”条件下进行验证检查是安全的。如果您使用“分页”字段的任何多页 Webform,您的“name
”字段位于第 2 页,因此当您打开 Webform 的第 1 页时,“name
”字段不在 $form
参数中,因此会引发错误。 “isset”的作用是检查字段是否存在,如果存在,则检查验证,否则跳过验证。
现在您可以添加任何字段的任何验证检查并显示相应的错误。您也可以在任何字段中添加多个验证。您可以添加任何条件验证,例如如果 A 字段的值是这个,则 B 字段的值将是这个。因此,请随意添加任何验证。