drupal_goto (request_uri ()) zastępuje moje „?”, „=” i „&” w adresie URL

11

Muszę przekierować użytkownika ze strony z example.com/node/add/dispo?arg1=1&arg2=2 do tego samego typu adresu URL. Ale kiedy po prostu to zrobię drupal_goto(request_uri());, przekierowuje mojego użytkownika do example.com/node/add/dispo%25F%3C itp.

Próbowałem str_replace, ale to nie działało.

Czy masz jakieś obejście?

Gregory Kapustin
źródło

Odpowiedzi:

32

drupal_goto()akceptuje $optionsparametr, który ma zostać przekazany do url()funkcji. Możesz przekazać ciąg zapytania w ten sposób:

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

Ten przykład przejdzie do / path? Foo = bar

Clive
źródło
Wydaje mi się, że jest czystszy niż nagłówek (lokalizacja?
Gregory Kapustin
2
Zależy to naprawdę, jeśli spojrzysz na kod, drupal_goto()wystarczy zbudować adres URL na podstawie podanych parametrów, które następnie wywołuje header(). Wywoływane są główne różnice drupal_exit(), co daje czyste wyjście ze skryptu, a jeśli $_GET['destination']jest ustawione, zastąpi ścieżkę przekazywaną do funkcji. Ogólnie drupal_goto()należy stosować, ale zdarzają się sytuacje, w których stare dobre header()są bardziej odpowiednie. Tylko zależy od tego, co musisz zrobić
Clive
Ok dzięki. Użyję do tego nagłówka, ale wydaje mi się, że drupal_goto jest czystszy.
Gregory Kapustin
zauważ, że tablica opcji zawiera zapytanie o parę z nazwą i parą wartości. Mój kod do logowania się za pomocą zmiennej docelowej wygląda następująco: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
reptilex
Amazing musi nauczyć się czegoś nowego
Rishab,
13

To samo co odpowiedź Clive'a. To poprawne IMO, ale chciałem tylko dodać odpowiedź, która pasuje do Twojego przypadku użycia 1: 1.

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

Chcesz zadzwonić drupal_goto()do tej samej lokalizacji, co bieżąca.

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

current_path () zwraca node / add / dispo; Funkcja drupal_get_query_parameters () zwraca wszystkie $_GETparametry, z wyjątkiem tego, $_GET['q']który jest wewnętrznym węzłem ścieżki / add / dispo.

Kiedy dzwonisz drupal_goto(), Drupal może odbudować ten sam identyfikator URI, aby wysłać użytkownika.

AyeshK
źródło
Świetnie, podniosłem twoją odpowiedź, gdy wybrałem Clive'a. Dziękuję wszystkim.
Gregory Kapustin
0

Możesz także użyć drupal_goto($GLOBALS['base_root'] . request_uri());

Pamiętaj, że nie jest to to samo, co w drupal_goto(request_uri());przypadku, gdy przekazany parametr jest zakodowany tak, jakby to była wewnętrzna ścieżka drupala, która w rzeczywistości jest źródłem problemu.

Anonimowy
źródło
-1

Właściwie to sprawiłem, że działa header("location: " . $base_path . request_uri());

Gregory Kapustin
źródło
3
To jest źle. drupal_goto powstał z jakiegoś powodu, który znasz.
AyeshK