tahu apakah Anda membangun kembali seluruh formulir atau hanya sebagian dan bungkus formulir sesuai dengan elemen div yang memiliki atribut ID yang akan Anda gunakan dalam definisi #ajax pada elemen pemicu sebagai 'bungkus'. Gunakan atribut #prefix dan #suffix untuk ini ( $form['#prefix'] = '<div id="myform-ajax-wrapper">'; $form['#suffix'] = '</div>';
). Juga perlu diingat bahwa jika Anda memiliki templat kustom untuk formulir Anda untuk TIDAK membuat awalan dan akhiran dalam kasus ini ( {{ form|without('#prefix', '#suffix') }}
) kalau tidak mereka akan dirender dua kali - oleh templat Anda dan juga oleh pembungkus tema form. Anda tidak dapat mencegah ini dengan menetapkan #theme_wrappers untuk mengosongkan array karena Templat formulir berisi elemen html formulir yang sebenarnya.
di ajax kirim handler Anda, kembalikan seluruh formulir atau bagiannya yang telah Anda bungkus dan ingin dibangun kembali ( return $form
atau return $form['myelement']
). Anda juga dapat menggunakan perintah ajax bukan hanya mengembalikan struktur formulir tetapi itu adalah hal yang lebih maju.
menyimpan setiap nilai dalam penyimpanan kondisi formulir sampai Anda mengirimkan formulir. Lakukan ini di pengirim handler ( $form_state->set('somevalue', $form_state->getValue('somevalue'))
) dan selalu panggil $form_state->setRebuild()
jika Anda tidak melakukan pengiriman formulir akhir. Saya lebih suka memiliki penangan pengiriman kustom tetapi memiliki lebih banyak logika dalam penangan pengiriman utama juga ok.
selalu gunakan #name
atribut pada tombol yang melakukan pengiriman dan jika Anda hanya memiliki satu formulir kirim gunakan handler $for_state->getTriggeringElement()['#name']
untuk mendeteksi elemen mana yang telah mengirimkan formulir.
jika Anda menggunakan 'trigger_as' dalam definisi #ajax, jika Anda ingin mengirimkan formulir dengan elemen pilih misalnya, selalu gunakan definisi #ajax yang sama seperti yang Anda lakukan pada tombol. Dalam pengalaman saya itu diperlukan - meskipun tidak disebutkan dalam dokumentasi.
menggunakan #limit_validation_errors
kadang-kadang bisa sangat rumit dan untuk mencari tahu mengapa formulir tidak berfungsi bisa memakan waktu cukup lama, jadi gunakan dengan hati-hati (ini bagus untuk mengisolasi kesalahan formulir hanya pada elemen yang Anda benar-benar buat kembali sehingga kode Anda tidak mempengaruhi bagian lain dari formulir).
selalu gunakan tombol untuk mengirimkan formulir dan jika Anda ingin memiliki sesuatu yang mewah, seperti memilih menjadi elemen pemicu, gunakan opsi 'trigger_as' dari konfigurasi #ajax dan sembunyikan tombol nyata dengan kelas 'js-hide' untuk UI yang bagus.
dalam definisi formulir, dapatkan nilai default dari penyimpanan kondisi formulir jika ada atau tetapkan ke dalam penyimpanan jika tidak ada. Kalau tidak, formulir tidak akan berfungsi dengan baik.
jangan gunakan $ this atau apa pun yang Anda tidak memiliki akses ke luar, jika tidak akan merusak ajax. selalu menggunakan penangan ajax statis.
ketika akhirnya mengirimkan formulir, tergantung pada kenyataan bahwa Anda (tidak) memiliki penangan pengiriman formulir kustom untuk ajax, nonaktifkan formulir pembangunan kembali dengan memanggil $form_state->setRebuild(FALSE)
.
Anda dapat menggunakan :: panggilan singkat dalam elemen pengiriman ajax ( $element['#ajax']['callback'] = '::ajaxFormRebuild';
dan $element['#submit'] = [['::ajaxFormSubmitHandler'];
).
panggilan balik ajax murni untuk mengembalikan formulir yang dibangun kembali atau perintah ajax. Jangan pernah mengembalikan formulir yang diubah (mis. Jangan mengubah form array di panggilan balik ini).