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?

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


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.


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.


-1

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


3
ini salah. drupal_goto dibuat karena alasan tertentu, Anda tahu.
AyeshK
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.