drupal_goto (request_uri ()) замінює мої "?", "=" та "&" в URL-адресі


11

Мені потрібно перенаправити користувача зі сторінки з example.com/node/add/dispo?arg1=1&arg2=2 до того ж типу URL-адреси. Але коли я просто роблю a 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


Я думаю, це чистіше, ніж заголовок (місце розташування?
Григорій Капустін

2
Це дійсно залежить, якщо ви подивитеся на код, все drupal_goto()це - це створення URL-адреси на основі заданих параметрів, які він потім викликає header()на себе. Основні відмінності полягають у тому, що drupal_exit()викликається, що дає чіткий вихід сценарію, і якщо $_GET['destination']він встановлений, це замінить шлях, який ви проходите до функції. Взагалі drupal_goto()слід користуватися, але бувають випадки, коли добрий старий header()доречніший. Просто залежить, що вам потрібно зробити
Clive

Добре, дякую. Я буду використовувати заголовок для цього, але все-таки, я думаю, drupal_goto чистіший.
Григорій Капустін

зауважте, що масив параметрів містить запит масиву з парою імен та значень. Тож мій код для входу зі змінною призначення виглядає приблизно так: $ options = array ('query' => array ('target' => 'Internal / dashboard') drupal_goto ('user', $ options));
рептилія

Дивовижні повинні дізнатися щось нове
Рішаб

13

Це те саме, що відповідь Клайва. Це правильний ІМО, але я просто хотів додати відповідь, яка відповідає вашому випадку використання 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 () повертає вузол / add / dispo; drupal_get_query_parameters () повертає всі $_GETпараметри, за винятком $_GET['q']внутрішнього вузла шляху / add / dispo.

Коли ви телефонуєте drupal_goto(), Drupal може відновити той самий URI, щоб надіслати користувача.


Чудово, я підвищив вашу відповідь, коли тримаю обрання Клайва. Thx ви всі.
Григорій Капустін

0

Ви також можете використовувати drupal_goto($GLOBALS['base_root'] . request_uri());

Зауважте, що це не те саме, drupal_goto(request_uri());де переданий параметр urlencoded, як ніби це внутрішній шлях drupal, який насправді є джерелом вашої проблеми.


-1

Насправді я змусив це працювати, використовуючи header("location: " . $base_path . request_uri());


3
це неправильно. drupal_goto зроблений з якихось відомих вам причин.
АйешК
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.