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.