Bagaimana saya bisa menambahkan penangan pengiriman formulir kustom?
Saya mencoba menambahkan $form['#submit'][] = 'mymodule_form_submit';
atau $form['actions']['submit']['#submit'][] = 'mymodule_form_submit';
ke hook_form_alter()
.
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\HttpFoundation\Request;
function MYMODULE_form_alter(&$form, FormStateInterface $form_state, $form_id) {
if ($form_id == 'node_trends_form' || $form_id == 'node_trends_edit_form') {
foreach (array_keys($form['actions']) as $action) {
if ($action != 'preview' && isset($form['actions'][$action]['#type']) && $form['actions'][$action]['#type'] === 'submit') {
$form['actions']['submit']['#submit'][] = 'mymodule_form_submit';
}
}
}
}
function mymodule_form_submit(array $form, FormStateInterface $form_state){
//die("why won't this execute? :(");
drupal_set_message("Why won't this message show?");
}
Sepertinya drupal_set_message()
tidak disebut. Saya juga mencoba membangun kembali cache, tetapi fungsinya masih belum dipanggil.
Saya menggunakan Drupal 8.2.3.
hook_form_alter()
, atau agak sulit untuk memberi tahu Anda apa yang Anda lakukan salah. Anda juga harus mengatakan bentuk mana yang ingin Anda ubah.Jawaban:
Jika Anda menggunakan
hook_form_node_form_alter()
mungkin menggunakan kode contoh :dan kirimkan fungsi
sumber
$form['actions'][$action]['#submit'][]
dokumentasi mana yang Anda lihat? atau apakah Anda membuat kesalahan ketik? Dalam dokumen hook_form_alter ini dikatakan$form['actions']['submit']['#submit'][]
.Membuat plugin handform webform khusus untuk drupal 8.
Dokumen ini menganggap Anda sudah menginstal dan mengaktifkan webform dan webform-ui
1) Buat formulir web Anda. - Buka struktur -> formulir web dan tekan tombol "+ Tambahkan formulir web". - Anda dapat menggunakan ui atau menggunakan yaml, itu terserah Anda. contoh yaml untuk formulir satu bidang yang mengambil alamat email:
Lekukan itu penting untuk ubi jadi pastikan Anda melakukannya dengan benar. indentasi adalah spasi.
Sekarang simpan formulir Anda.
2) Membuat plugin handform webform
Selanjutnya kita dapat membuat plugin baru yang akan muncul di bagian "Email / Penangan" saat mengedit formulir web. Saya akan menyebutnya myhandler, Anda dapat menyebutnya apa yang Anda inginkan, asalkan Anda mengganti semua menyebutkan myhandler dengan nama yang Anda pilih.
a) Buat folder baru untuk plugin Anda, lakukan ini di root drupal Anda (disebut di sini sebagai / var / www / html /) di subfolder berikut: / var / www / html / modules / Custom / myhandler
b) Buat file baru di direktori di atas bernama myhandler.info.yml dalam file ini sebagai berikut:
3) Buat direktori src di direktori modul Anda, misalnya: / var / www / html / modules / Kustom / myhandler / src di src buat Plugin di Plugin buat WebformHandler
(ini dapat dicapai dalam sekali pakai
yang akan membuat seluruh struktur dalam sekali jalan menggunakan flag -p ke mkdir.)
4) Buat file baru
/var/www/html/modules/Custom/myhandler/src/Plugin/WebformHandler/MyFormHandler.php
dalam file itu ikuti kode php berikut, saya telah meninggalkan pengaturan form konfigurasi sehingga Anda dapat melihat cara mengkonfigurasi plugin Anda jika diperlukan.
5) Aktifkan modul MyHandler Anda (menggunakan menu drush atau extended) dan kemudian buat kembali cache drupal Anda ("drush cr" dari mana saja di bawah root drupal Anda (/ var / www / html di sini) akan melakukannya jika Anda menggunakan drush)
6) edit formulir web Anda, buka "Email / Penangan" dan klik tombol "+ Tambahkan Penangan" Anda akan melihat plugin Anda terdaftar, klik Tambah Handler, Anda sekarang akan melihat kotak meminta URL pengiriman. klik tombol Simpan. Jika sesuatu tidak beres, atau tidak berfungsi, periksa log kesalahan apache, Anda mungkin menemukan sesuatu yang bermanfaat di sana.
7) Tes formulir Anda - buat pengajuan ke formulir, dan kemudian periksa log pengawas (drush ws), Anda harus melihat nilai yang dikirim kepadanya. Mereka mungkin terpotong dalam output yang Anda lihat, jangan panik, semuanya ada di sana. Apa yang Anda lakukan dengan ini sekarang terserah Anda.
Semoga ini bisa membantu seseorang. Saya menggulungnya bersama-sama dari barang-barang yang saya temukan di sekitar tempat itu dan menulisnya menjadi satu dokumen. Terima kasih kepada yang lain yang membawaku ke sini.
sumber
parent::submitConfigurationForm($form, $form_state);
danparent::applyFormStateToConfiguration($form_state);
.submitForm()
fungsi dan itu berfungsi. Semua fungsi lainnya terletak di kelas dasar dan saya tidak perlu menimpanya. Ngomong-ngomong: solusi sederhana yang cukup bagus setelah Anda mengetahuinya ;-)jika menggunakan hook_form_BASE_FORM_ID_alter di Drupal 8 core 8.4.3, saya menemukan cara-cara menambahkan custom submit handler tidak berfungsi. Ini berfungsi untuk menambahkan nama fungsi kirim penangan:
Dalam situasi lain, menggunakan hook_form_FORM_ID_alter di Drupal 8.4.5, saya menemukan hal di atas tidak berfungsi untuk menambahkan custom handler handler. Sebaliknya, ini berhasil:
sumber
Jawaban yang diterima tidak berfungsi untuk saya menggunakan Drupal 8.7.7, mencoba menambahkan pengajuan kiriman ke formulir dari
search_api
modul.Saya mendapat kesalahan ini:
Untuk membuatnya berfungsi, saya mengubah tanda tangan fungsi saya menjadi namespace lengkap antarmuka:
sumber