drupal_goto (request_uri ()) reemplaza mi '?', '=' y '&' en la URL

11

Necesito redirigir al usuario desde una página con example.com/node/add/dispo?arg1=1&arg2=2 al mismo tipo de URL. Pero cuando simplemente hago un drupal_goto(request_uri());, redirige a mi usuario a example.com/node/add/dispo%25F%3C, etc.

Intenté un str_replace pero no funcionó.

¿Tendrías alguna solución?

Gregory Kapustin
fuente

Respuestas:

32

drupal_goto()acepta un $optionsparámetro para pasar a la url()función. Puede pasar una cadena de consulta como esta:

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

Ese ejemplo reenviará a / path? Foo = bar

Clive
fuente
Supongo que es más limpio que el encabezado (¿ubicación?
Gregory Kapustin
2
Depende realmente, si nos fijamos en el código, todo lo que drupal_goto()hace es construir una URL basada en los parámetros proporcionados, que luego llama header()a sí mismo. Las principales diferencias son que drupal_exit()se llama, dando una salida limpia al script, y si $_GET['destination']está configurado, anulará la ruta que pasa a la función. En general, se drupal_goto()debe usar, pero hay ocasiones en que lo bueno header()es más apropiado. Solo depende de lo que necesite hacer
Clive
OK gracias. Usaré el encabezado para este, pero aún así, supongo que drupal_goto está más limpio.
Gregory Kapustin
observe que la matriz de opciones tiene una consulta de matriz con un par de nombre y valor. Entonces, mi código para iniciar sesión con una variable de destino se ve así: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
reptilex
Amazing tiene que aprender algo nuevo
Rishab
13

Esto es lo mismo que la respuesta de Clive. Es IMO correcto, pero solo quería agregar la respuesta que se adapte a su caso de uso 1: 1.

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

Querías llamar drupal_goto()a la misma ubicación que la actual.

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

current_path () devuelve node / add / dispo; drupal_get_query_parameters () devuelve todos los $_GETparámetros, excepto $_GET['q']cuál es la ruta interna nodo / add / dispo.

Cuando llama drupal_goto(), Drupal puede reconstruir el mismo URI para enviar al usuario.

AyeshK
fuente
Genial, aumenté tu respuesta mientras mantengo a Clive elegido. Gracias a todos ustedes.
Gregory Kapustin
0

También puedes usar drupal_goto($GLOBALS['base_root'] . request_uri());

Tenga en cuenta que no es igual a drupal_goto(request_uri());donde el parámetro pasado se codifica como si fuera una ruta interna de drupal, que en realidad es la fuente de su problema.

Anónimo
fuente
-1

En realidad lo hice funcionar usando header("location: " . $base_path . request_uri());

Gregory Kapustin
fuente
3
esto está mal. drupal_goto está hecho por alguna razón que sabes.
AyeshK