Как изменить обработчик отправки формы?

16

По какой-то причине мне нужно заменить некоторые символы (если они есть) в каждом отдельном текстовом поле в любой форме непосредственно перед сохранением в базе данных. Другими словами, мне нужен хук, в котором я мог бы получить все представленные данные и заменить их символы.
Я нашел это решение:

function hook_form_alter($form, $form_state, $form_id) {
  $form['#submit'] = 'my_custom_submission_function';
}

Но это не очень хорошая идея, так как я должен позаботиться об остальной части процесса представления. Мне просто нужно заменить некоторые символы. Есть ли крюк для этого? Каковы решения?

Педрам Бехрузи
источник

Ответы:

22

$form['#submit']хранит массив обработчиков отправки формы. С предоставленным вами кодом вы перезаписываете его, добавляя только свой собственный. Чтобы получить желаемый результат, вы должны добавить свой обработчик отправки в качестве первого элемента в массиве следующим образом:

array_unshift($form['#submit'], 'mymodule_custom_submission');

Получение правильных значений в правильных формах и замена некоторых символов, вероятно, является самой большой проблемой. Возможно, вы захотите сузить формы / поля, которые нужно изменить, чтобы убедиться, что вы ничего не нарушаете.

Мадис
источник
2

Возможно, было бы лучше выполнить эти изменения во время проверки, а не отправки, как это было предложено Drupal (см. Функцию form_set_value по адресу https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 ).

Так что в вашем hook_form_alter вы можете даже добавить его в конец существующих функций проверки, если хотите:

$form['#validate'][] = 'mymodule_custom_validation';
Вишнар Таделератха
источник