我想在将表单保存到数据库之前验证它的输入,以防止Sql注入和XSS。
我不想直接修改模块的代码,所以我创建了一个自定义模块来完成这类工作,但我不确定如何使用validate元素来调用验证函数。
在我的自定义模块中,我实现了这个逻辑的函数:
function mymodule_form_alter(&$form, $form_state, $form_id) {
switch ($form_id) {
case 'myform':
drupal_set_message('this message is printed :D');
$form['#validate'] = array('my_validation_function');
break;
}
}
function my_validation_function($form, &$form_state) {
drupal_set_message('not printed :(');
watchdog('not printed :___(', 'not printed :___(');
}
我不知道它是如何工作的,但似乎在我提交表单时,第二个函数永远不会被调用。
编辑(解决方案):
我终于找到了验证放在模块中的位置:
$form['mod_name']['submit']['#validate'][] = 'my_validation_function';
我认为,尽管$form变量上有内容,但是仅仅添加form['#validate']就可以工作,但是如果不将#validate元素放在预期的位置,则它似乎会被忽略,这取决于模块的实现。