Bagaimana cara mengubah penangan pengiriman formulir?

16

Untuk beberapa alasan saya perlu mengganti beberapa karakter (jika ada) di setiap bidang teks dalam bentuk apa pun tepat sebelum disimpan dalam database. Dengan kata lain saya memerlukan sebuah kait di mana saya bisa mendapatkan semua data yang dikirimkan dan mengganti karakter mereka.
Saya menemukan solusi ini:

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

Tapi ini bukan ide yang baik karena saya harus mengurus sisa pengajuan kemajuan juga. Saya hanya perlu mengganti beberapa karakter. Apakah ada kaitan untuk melakukan ini? Apa solusinya?

Pedram Behroozi
sumber

Jawaban:

22

$form['#submit']menyimpan berbagai form handler penangan. Dengan kode yang Anda berikan, Anda menimpanya dengan menambahkan kode Anda sendiri. Untuk mendapatkan hasil yang Anda inginkan, Anda harus menambahkan kiriman Anda sebagai elemen pertama dalam array seperti ini:

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

Mendapatkan nilai yang tepat dalam bentuk yang tepat dan mengganti beberapa karakter mungkin merupakan masalah yang lebih besar. Anda mungkin ingin mempersempit formulir / bidang yang perlu Anda ubah untuk memastikan Anda tidak merusak apa pun.

Madis
sumber
2

Mungkin akan lebih baik untuk melakukan modifikasi ini selama validasi daripada penyerahan seperti yang disarankan oleh Drupal (lihat fungsi form_set_value di https://api.drupal.org/api/drupal/includes!form.inc/function/form_set_value/7 ).

Jadi di hook_form_alter Anda, Anda bahkan dapat menambahkannya ke akhir fungsi validasi yang ada jika Anda suka:

$form['#validate'][] = 'mymodule_custom_validation';
Vishnar Tadeleratha
sumber