我希望在将表单保存到数据库之前验证表单的输入,以防止Sql Injection和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 ['#validify']就可以使用$ form变量的内容,但是如果你没有将#validate元素放在预期的位置,那么这似乎取决于模块的实现它被忽略了。
答案 0 :(得分:5)
小心更换#validate键,因为您将替换之前添加的任何其他验证器。
最好将你的功能附加到它上面;
$form['#validate'][] = 'my_validation_function';