Як змінити обробник форми подання форми?


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 ).

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

$form['#validate'][] = 'mymodule_custom_validation';
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.