Saya memiliki modul khusus yang menampilkan formulir.
Setelah mengirimkan formulir, saya ingin mengarahkan pengguna ke halaman lain.
Bagaimana saya bisa melakukan itu?
Di dalam penangan kirim Anda lakukan
Drupal 7:
$form_state['redirect'] = 'url';
Drupal 8:
$form_state->setRedirect('route', $args, $options);
$form_state->setRedirectUrl(\Drupal\Core\Url);
/my-form?destination=node/123
.Perlu dicatat ada beberapa pemicu yang dapat mencegah pengalihan:
$form_state['redirect'] === FALSE
: Jika disetel, fungsi pembuat formulir atau validasi formulir / ajukan handler tidak ingin pengguna diarahkan, yang artinyadrupal_goto()
tidak dipanggil. Untuk sebagian besar bentuk, logika pengalihan akan sama terlepas dari apakah$form_state['redirect']
tidak didefinisikan atau SALAH. Namun, jika tidak ditentukan dan permintaan saat ini berisi string kueri 'tujuan',drupal_goto()
akan mengarahkan ke tujuan yang diberikan sebagai gantinya. Hanya pengaturan$form_state['redirect']
ke yangFALSE
akan mencegah pengalihan.$form_state['no_redirect'] === TRUE
: Ketika disetel, callback yang awalnya membangun formulir secara eksplisit melarang pengalihan apa pun, terlepas dari nilai pengalihan di$form_state['redirect']
. Misalnya,ajax_get_form()
menentukan$form_state['no_redirect']
kapan membuat formulir dalam panggilan balik AJAX untuk mencegah pengalihan.$form_state['no_redirect']
tidak boleh diubah oleh fungsi pembuat formulir atau validasi formulir / ajukan penangan.$form_state['programmed'] === TRUE
: berarti pengiriman formulir biasanya dipanggil melaluidrupal_form_submit()
, sehingga pengalihan akan merusak skrip yang dipanggildrupal_form_submit()
.$form_state['rebuild'] === TRUE
: berarti formulir perlu dibangun kembali tanpa pengalihan.sumber
Untuk Drupal 7, saya mencoba ini pada modul khusus dan berfungsi. Itu juga dapat digunakan dalam tema:
BTW, saya menemukan cuplikan ini di sini: https://gist.github.com/postrational/5768796
sumber
Untuk mengarahkan ulang ke URL eksternal di Drupal 8, gunakan
TrustedRedirectResponse
kelas, seperti dalam kode berikut.sumber
use
kata kunci dan ruang namanya:use Drupal\Core\Routing\TrustedRedirectResponse;
Pada D8 saya suka ini (tapi ini tidak akan berhasil ... lihat di bawah):
Edit /
Saya tidak ada yang berfungsi setRedirect / setRedirectUrl SETELAH modul dikirimkan, jadi ini adalah solusi kerja saya pada D8:
Semoga ini bisa membantu
sumber
Untuk drupal 7 jika Anda ingin mengarahkan ulang ke url dengan params like
someurl?param1=1¶m2=2
sumber