Drupal подтвердить форму - PullRequest
2 голосов
/ 16 ноября 2010

Я хочу проверить ввод формы перед ее сохранением в базе данных, чтобы предотвратить 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 там, где ожидается оно игнорируется.

1 Ответ

5 голосов
/ 16 ноября 2010

Будьте осторожны при замене ключа #validate, так как вы замените все другие валидаторы, которые были добавлены до вас.

Лучше всего добавить к нему свою функцию;

$form['#validate'][] = 'my_validation_function';
...