You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:17:50