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?

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


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.


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.


-1

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


3
esto está mal. drupal_goto está hecho por alguna razón que sabes.
AyeshK
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.