如何在Drupal自定义模块中实现count字段小于capacity字段的验证?
修正你的Drupal表单验证代码
嘿,我来帮你梳理下这段验证代码里的问题,再给你调整成符合Drupal最佳实践的版本~
首先说下原代码里几个需要改进的点:
- 你把错误提示绑定到了
title字段,这会让用户摸不着头脑,应该把错误关联到count字段,这样提示会直接显示在对应输入框下方,体验更友好。 - 获取字段值的方式不对,Drupal表单的提交值应该从
$form_state['values']里读取,而且内容类型的字段通常是带field_前缀的机器名(比如field_capacity、field_count),你得换成自己实际的字段机器名。 - 没做基础校验,如果用户没填值或者输入了非数字内容,直接比较会出逻辑错误,得先确保两个值都是有效的数字。
下面是修正后的完整代码:
function MYMODULE_node_form_validate($form, &$form_state) { // 替换成你内容类型里实际的字段机器名 $capacity_field = 'field_capacity'; $count_field = 'field_count'; // 从form_state中正确读取字段值(适配Drupal字段API的结构) $capacity = isset($form_state['values'][$capacity_field][0]['value']) ? $form_state['values'][$capacity_field][0]['value'] : ''; $count = isset($form_state['values'][$count_field][0]['value']) ? $form_state['values'][$count_field][0]['value'] : ''; // 先校验两个字段是否为有效数字 if (!is_numeric($capacity)) { form_set_error($capacity_field, t('Capacity必须是有效的数字。')); return; } if (!is_numeric($count)) { form_set_error($count_field, t('Count必须是有效的数字。')); return; } // 转换为数值类型,避免字符串比较的坑 $capacity = (float)$capacity; $count = (float)$count; // 核心校验逻辑:count必须小于capacity if ($count > $capacity) { form_set_error($count_field, t('Count不能大于Capacity的值哦。')); } }
额外提醒
- 记得把代码里的
MYMODULE替换成你自己的模块名称,field_capacity和field_count替换成你在内容类型里设置的真实字段机器名(可以在内容类型的字段管理页面查看)。 - 用
t()函数包裹错误提示,是为了支持多语言翻译,这是Drupal开发的标准做法。
内容的提问来源于stack exchange,提问作者Madhu Nair
相关产品推荐
相关产品推荐

