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?

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


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.


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.


-1

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


3
das ist falsch. drupal_goto ist aus irgendeinem Grund gemacht, den Sie kennen.
AyeshK
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.