Я хочу проверить ввод формы перед ее сохранением в базе данных, чтобы предотвратить 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';
Я думал, что простое добавление формы ['# validate'] будет работать, несмотря на содержимое переменной $ form, но кажется, что в зависимости от реализации модуля, если вы не разместите элемент #validate там, где ожидается оно игнорируется.