drupal_goto (request_uri ()) menggantikan '?', '=' dan '&' di url saya

11

Saya perlu mengarahkan pengguna dari halaman dengan example.com/node/add/dispo?arg1=1&arg2=2 ke jenis URL yang sama. Tetapi ketika saya hanya melakukan drupal_goto(request_uri());, itu mengarahkan pengguna saya ke example.com/node/add/dispo%25F%3C dll ....

Saya mencoba str_replace tetapi tidak berhasil.

Apakah Anda punya solusi?

Gregory Kapustin
sumber

Jawaban:

32

drupal_goto()menerima $optionsparameter untuk diteruskan ke url()fungsi. Anda dapat mengirimkan string kueri seperti ini:

$options = array('query' => array('foo' => 'bar'));
drupal_goto('path', $options);

Contoh itu akan diteruskan ke / path? Foo = bar

Clive
sumber
Saya kira itu lebih bersih daripada header (lokasi?
Gregory Kapustin
2
Itu benar-benar tergantung, jika Anda melihat kode semua drupal_goto()tidak membangun URL berdasarkan parameter yang disediakan yang kemudian memanggilnya header()sendiri. Perbedaan utama adalah yang drupal_exit()dipanggil, memberikan jalan keluar yang bersih ke skrip, dan jika $_GET['destination']diset, itu akan menimpa jalur yang Anda lewati ke fungsi. Umumnya drupal_goto()harus digunakan, tetapi ada saat-saat ketika tua yang baik header()lebih tepat. Tergantung apa yang perlu Anda lakukan
Clive
Ok terima kasih. Saya akan menggunakan tajuk untuk yang satu ini tetapi tetap saja, saya kira drupal_goto lebih bersih.
Gregory Kapustin
perhatikan bahwa array opsi memiliki permintaan array dengan pasangan nama dan nilai. Jadi kode saya untuk masuk dengan variabel tujuan terlihat seperti ini: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
reptil
Luar biasa harus belajar sesuatu yang baru
Rishab
13

Ini sama dengan jawaban Clive. Itu IMO yang benar tetapi saya hanya ingin menambahkan jawaban yang sesuai dengan kasus penggunaan Anda 1: 1.

$options = array('query' => drupal_get_query_parameters());
drupal_goto(current_path(), $options);

Anda ingin menelepon drupal_goto()ke lokasi yang sama dengan yang sekarang.

mysite.com/node/add/dispo?arg1=1&arg2=2

current_path () mengembalikan node / add / dispo; drupal_get_query_parameters () mengembalikan semua $_GETparameter kecuali $_GET['q']yang merupakan simpul jalur internal / add / dispo.

Saat Anda menelepon drupal_goto(), Drupal dapat membangun kembali URI yang sama untuk mengirim pengguna.

AyeshK
sumber
Hebat, aku menaikkan jawabanmu sementara aku tetap memilih Clive. Terima kasih semuanya.
Gregory Kapustin
0

Anda juga bisa menggunakan drupal_goto($GLOBALS['base_root'] . request_uri());

Perhatikan bahwa ini tidak sama dengan di drupal_goto(request_uri());mana parameter yang dilewatkan di urlencoded seolah-olah itu adalah jalur drupal internal, yang sebenarnya merupakan sumber masalah Anda.

Anonim
sumber
-1

Sebenarnya saya membuatnya bekerja dengan menggunakan header("location: " . $base_path . request_uri());

Gregory Kapustin
sumber
3
ini salah. drupal_goto dibuat karena alasan tertentu, Anda tahu.
AyeshK