我想在将表单保存到数据库之前验证表单的输入,以防止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';
我认为只要添加表单['#validify']就可以使用$ form变量上的内容了,但是如果你没有将#validate元素放在预期的地方,它似乎取决于模块的实现.
小心替换#validate键,因为您将替换之前添加的任何其他验证器.
最好将你的功能附加到它上面;
$form['#validate'][] = 'my_validation_function';