drupal_goto (request_uri ()) แทนที่ my '?', '=' และ '&' ใน url


11

ฉันต้องเปลี่ยนเส้นทางผู้ใช้จากหน้าเว็บที่มี example.com/node/add/dispo?arg1=1&arg2=2 เป็น URL ประเภทเดียวกัน แต่เมื่อฉันทำdrupal_goto(request_uri());มันมันเปลี่ยนเส้นทางผู้ใช้ของฉันไปที่ example.com/node/add/dispo%25F%3C ฯลฯ ....

ฉันลอง str_replace แต่ใช้งานไม่ได้

คุณมีวิธีแก้ปัญหาหรือไม่?

คำตอบ:


32

drupal_goto()ยอมรับ$optionsพารามิเตอร์ที่จะส่งผ่านไปยังurl()ฟังก์ชัน คุณสามารถส่งผ่านสตริงแบบสอบถามแบบนี้:

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

ตัวอย่างนั้นจะส่งต่อไปยัง / path? foo = bar


ฉันเดาว่ามันสะอาดกว่าส่วนหัว (ที่ตั้งใช่ไหม
Gregory Kapustin

2
มันขึ้นอยู่กับว่าถ้าคุณดูรหัสทั้งหมดdrupal_goto()จะเป็นการสร้าง URL ตามพารามิเตอร์ที่ให้มาซึ่งมันจะเรียกheader()ใช้เอง ความแตกต่างที่สำคัญdrupal_exit()คือที่เรียกว่าให้ออกจากสคริปต์ที่สะอาดและหาก$_GET['destination']มีการตั้งค่าที่จะแทนที่เส้นทางที่คุณผ่านไปยังฟังก์ชั่น โดยทั่วไปdrupal_goto()ควรใช้ แต่มีหลายครั้งที่ผู้สูงอายุที่ดีheader()เหมาะสมกว่า ขึ้นอยู่กับสิ่งที่คุณต้องทำ
Clive

โอเคขอบคุณ. ฉันจะใช้ส่วนหัวสำหรับอันนี้ แต่ฉันคิดว่า drupal_goto สะอาดกว่า
เกรกอรี่ Kapustin

สังเกตว่าอาร์เรย์ตัวเลือกมีแบบสอบถามแบบอาร์เรย์ที่มีคู่ชื่อและค่า ดังนั้นรหัสของฉันเพื่อเข้าสู่ระบบด้วยตัวแปรปลายทางมีลักษณะดังนี้: $ options = array ('query' => array ('ปลายทาง' => 'internal / dashboard') drupal_goto ('user', $ options));
สัตว์เลื้อยคลาน

น่าอัศจรรย์ต้องเรียนรู้สิ่งใหม่
Rishab

13

นี่เป็นคำตอบเดียวกับไคลฟ์ มันถูกต้อง IMO แต่ฉันแค่ต้องการเพิ่มคำตอบที่เหมาะสมกับกรณีการใช้งานของคุณ 1: 1

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

คุณต้องการโทรdrupal_goto()ไปยังสถานที่เดียวกันกับที่ตั้งปัจจุบัน

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

current_path ()ส่งคืนโหนด / เพิ่ม / dispo; drupal_get_query_parameters ()ส่งคืน$_GETพารามิเตอร์ทั้งหมดยกเว้น$_GET['q']ซึ่งเป็นโหนดพา ธ ภายใน / add / dispo

เมื่อคุณโทรdrupal_goto()Drupal สามารถสร้าง URI เดียวกันใหม่เพื่อส่งผู้ใช้ไปยัง


เยี่ยมมากฉันเพิ่มคำตอบของคุณเมื่อฉันเลือก Clive ไว้ ขอบคุณทุกท่าน
Gregory Kapustin

0

คุณยังสามารถใช้ drupal_goto($GLOBALS['base_root'] . request_uri());

โปรดทราบว่ามันไม่เหมือนกับdrupal_goto(request_uri());ที่พารามิเตอร์ส่งผ่านถูก urlencoded ราวกับว่ามันเป็นเส้นทาง drupal ภายในซึ่งเป็นแหล่งที่มาของปัญหาของคุณ


-1

ที่จริงฉันทำให้มันใช้งานได้ header("location: " . $base_path . request_uri());


3
นี่มันผิด drupal_goto สร้างขึ้นด้วยเหตุผลบางอย่างที่คุณรู้
AyeshK
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.