原文链接http://drupal.org/node/1111280
表格的API提供了出色的默认表格数据检查机制,但是也允许我们建立自己的数据检查方法。在这里,我们需要确保用户输入的数字大于0。检查数据的方法和validate钩子很相似,只是用表格的ID代替了模块名。所以我们的数据核实方法应该叫做current_posts_form_validate($form, &$form_state)。不要把这个与validate钩子想混淆,validate钩子是系统钩子,而我们的方法是自己建立的某一个表格的数据检查方法。
请注意$form_state队列变量,这个参数在表格方法和数据检查方法中都要用到。$form_state队列中含有表格在每个状态中所包含的信息和当前状态。用户所输入的数据储存在$_POST变量中,先要被检查是否符合表格的结构,然后会被传送到表格检查方法和提交方法。队列的“value“关键字默认储存了用户所属入的信息。请参看$form_state()的关键字列表drupal_build_form()。
添加下面的方法到您的current_posts.module模块文件中:
<?php
/**
* Implements validation from the Form API.
*
* @param $form
* A structured array containing the elements and properties of the form.
* @param $form_state
* An array that stores information about the form's current state
* during processing.
*/
function current_posts_form_validate($form, &$form_state){
$max_num = $form_state['values']['current_posts_max'];
if (!ctype_digit($max_num)){
form_set_error('current_posts_max', t('You must enter a number for the maximum number of posts to display.'));
}
}
?>
请记住不要包含PHP的开始和结束符号
测试数据
首先,我们从$form_state队列中获取模块设置表格的数据并把他们存在一个变量中。然后我们便可以查看这是否是一个数字。如果不是,我们就用form_set_error来返回一个错误信息。这个方法的第一个参数表明您的表格的field名,是哪一个field出现了错误。第二个参数是您想向用户显示的信息内容。这个信息是用红色的框包围起来的。
如果用户所输入的信息通过了第一个检查,那么我们要检查它是不是一个正数。如果不是,我们还是用form_set_error来显示错误信息。注意错误信息的string是要用t()方法来翻译一下的。
检查
激活您的模块并访问设置页面。输入一些数字来看看我们的数据检查方法是不是工作。如果您要添加一些代码,请确保您的模块是未激活的。