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?

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


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.


Ś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.


-1

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


3
To jest źle. drupal_goto powstał z jakiegoś powodu, który znasz.
AyeshK
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.