drupal_goto (request_uri ()) thay thế '?', '=' và '&' trong url của tôi


11

Tôi cần chuyển hướng người dùng từ một trang có example.com/node/add/dispo?arg1=1&arg2=2 đến cùng loại URL. Nhưng khi tôi chỉ đơn giản làm một drupal_goto(request_uri());, nó sẽ chuyển hướng người dùng của tôi đến example.com/node/add/dispo%25F%3C, v.v ....

Tôi đã thử một str numplace nhưng nó không hoạt động.

Bạn có cách giải quyết nào không?

Câu trả lời:


32

drupal_goto()chấp nhận một $optionstham số được truyền vào url()hàm. Bạn có thể truyền chuỗi truy vấn như thế này:

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

Ví dụ đó sẽ chuyển tiếp tới / path? Foo = bar


Tôi đoán nó sạch hơn tiêu đề (vị trí?
Gregory Kapustin

2
Nó thực sự phụ thuộc, nếu bạn nhìn vào mã, tất cả drupal_goto()sẽ tạo ra một URL dựa trên các tham số được cung cấp mà sau đó header()nó tự gọi . Sự khác biệt chính drupal_exit()được gọi là, đưa ra một lối thoát rõ ràng cho tập lệnh và nếu $_GET['destination']được đặt, nó sẽ ghi đè đường dẫn mà bạn chuyển đến hàm. Nói chung drupal_goto()nên được sử dụng, nhưng có những dịp tốt cũ header()là thích hợp hơn. Chỉ phụ thuộc vào những gì bạn cần làm
Clive

Được rồi cảm ơn. Tôi sẽ sử dụng tiêu đề cho cái này nhưng vẫn vậy, tôi đoán drupal_goto sạch hơn.
Gregory Kapustin

lưu ý rằng mảng tùy chọn có một truy vấn mảng với cặp tên và giá trị. Vì vậy, mã của tôi để đăng nhập bằng một biến đích trông như thế này: $ Options = mảng ('query' => mảng ('Destination' => 'Internal / dashboard') drupal_goto ('user', $ Options));
reptilex

Thật tuyệt vời khi học được điều gì đó mới
Rishab

13

Điều này giống như câu trả lời của Clive. Đó là IMO đúng nhưng tôi chỉ muốn thêm câu trả lời phù hợp với trường hợp sử dụng của bạn 1: 1.

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

Bạn muốn gọi drupal_goto()đến cùng một vị trí như hiện tại.

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

current_path () trả về nút / add / disto; drupal_get_query_parameter () trả về tất cả các $_GETtham số ngoại trừ $_GET['q']đó là nút đường dẫn nội bộ / add / disto.

Khi bạn gọi drupal_goto(), Drupal có thể xây dựng lại cùng một URI để gửi người dùng đến.


Tuyệt vời, tôi đã đưa ra câu trả lời của bạn khi tôi giữ Clive. Thx các bạn.
Gregory Kapustin

0

Bạn cũng có thể dùng drupal_goto($GLOBALS['base_root'] . request_uri());

Lưu ý rằng nó không giống như drupal_goto(request_uri());nơi tham số đã truyền được urlencoding như thể nó là một đường dẫn drupal nội bộ, đây thực sự là nguồn gốc của vấn đề của bạn.


-1

Thật ra tôi đã làm cho nó hoạt động bằng cách sử dụng header("location: " . $base_path . request_uri());


3
cái này sai. drupal_goto được tạo ra vì một số lý do bạn biết.
AyeshK
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.