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.