drupal_goto (request_uri ()) ersetzt mein '?', '=' und '&' in der URL

11

Ich muss den Benutzer von einer Seite mit example.com/node/add/dispo?arg1=1&arg2=2 auf denselben URL-Typ umleiten. Aber wenn ich einfach a mache drupal_goto(request_uri());, leitet es meinen Benutzer zu example.com/node/add/dispo%25F%3C usw. weiter.

Ich habe str_replace ausprobiert, aber es hat nicht funktioniert.

Haben Sie eine Problemumgehung?

Gregory Kapustin
quelle

Antworten:

32

drupal_goto()Akzeptiert einen $optionsParameter, der an die url()Funktion übergeben werden soll. Sie können eine Abfragezeichenfolge wie folgt übergeben:

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

Dieses Beispiel wird an / path? Foo = bar weitergeleitet

Clive
quelle
Ich denke, es ist sauberer als Header (Ort?
Gregory Kapustin
2
Es hängt wirklich davon ab, ob Sie sich den Code ansehen. Sie müssen lediglich drupal_goto()eine URL auf der Grundlage der angegebenen Parameter erstellen, die sie dann header()selbst aufrufen. Die Hauptunterschiede bestehen darin, dass drupal_exit()aufgerufen wird und das Skript sauber beendet wird. Wenn dies $_GET['destination']festgelegt ist, wird der Pfad, den Sie an die Funktion übergeben, überschrieben. Im Allgemeinen drupal_goto()sollte verwendet werden, aber es gibt Situationen, in denen gutes Alter header()angemessener ist. Kommt darauf an, was du tun musst
Clive
OK danke. Ich werde den Header für diesen verwenden, aber ich denke, drupal_goto ist sauberer.
Gregory Kapustin
Beachten Sie, dass das Options-Array eine Array-Abfrage mit einem Paar aus Name und Wert enthält. Mein Code zum Anmelden mit einer Zielvariablen sieht also folgendermaßen aus: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
Reptilex
Amazing muss etwas Neues lernen
Rishab
13

Dies ist die gleiche Antwort wie bei Clive. Es ist IMO korrekt, aber ich wollte nur die Antwort hinzufügen, die zu Ihrem Anwendungsfall 1: 1 passt.

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

Sie wollten drupal_goto()denselben Standort anrufen wie den aktuellen.

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

current_path () gibt node / add / dispo zurück; drupal_get_query_parameters () gibt alle zurück$_GET Parameter zurück, außer $_GET['q']dem internen Pfad node / add / dispo.

Wenn Sie anrufen drupal_goto(), kann Drupal denselben URI neu erstellen, an den der Benutzer gesendet werden soll.

AyeshK
quelle
Großartig, ich habe deine Antwort verbessert, da ich Clives Wahl behalten habe. Danke euch allen.
Gregory Kapustin
0

Sie können auch verwenden drupal_goto($GLOBALS['base_root'] . request_uri());

Beachten Sie, dass dies nicht drupal_goto(request_uri());der Fall ist, wenn der übergebene Parameter urlencodiert ist, als ob es sich um einen internen Drupal-Pfad handelt, der tatsächlich die Quelle Ihres Problems ist.

Anonym
quelle
-1

Eigentlich habe ich damit gearbeitet header("location: " . $base_path . request_uri());

Gregory Kapustin
quelle
3
das ist falsch. drupal_goto ist aus irgendeinem Grund gemacht, den Sie kennen.
AyeshK