在Drupal 7中,如何在验证值之前更改提交表单的内容?

时间:2011-11-10 19:56:23

标签: php drupal drupal-7 drupal-modules

我想对以下内容大致类似(但不完全相同):我想创建一个具有SSN字段的Person内容类型。我想将SSN字段存储为整数,但允许用户输入数字123-45-6789。这意味着在验证触发之前,声明“123-45-6789”是无效输入,我想删除破折号并将其视为整数。

我尝试使用#value_callback函数以及非默认验证函数。那么问题是虽然我可以强制验证值,但是未更改的值是传递给db以进行插入的值,但是失败了。例如,这意味着虽然我可以强制“123-45-6789”被Drupal识别为“123456789”,但数据库仍然被传递“123-45-6789”,这当然失败了。

一个明显的解决方案是通过客户端javascript改变这一点,然后将值提交给网络服务器。我强烈希望避开这条路线。

2 个答案:

答案 0 :(得分:3)

道歉,如果我误解了你,你应该能够做这样的事情:

function my_validation_handler(&$form, &$form_state) {
  if (passes_ssn_validation($form_state['values']['SSN'])) {
    // Changing the value in $form_state here will carry on over to the submission function
    $form_state['values']['SSN'] = convert_to_db_format($form_state['values']['SSN']);
  }
  else {
    form_set_error('SSN', 'The SSN was invalid');
  }
}

然后,您将在表单构建或form_alter函数中使用$form['#validate'][] = 'my_validation_handler'附加该验证函数。

希望有所帮助

答案 1 :(得分:1)

你应该使用hook_node_presave()。它允许您在将不同字段的值插入数据库之前更改它们。这是官方文档:

http://api.drupal.org/api/drupal/modules--node--node.api.php/function/hook_node_presave/7

希望这有助于:)