web-dev-qa-db-fra.com

drupal_goto (request_uri ()) remplace mon '?', '=' et '&' dans l'url

Je dois rediriger l'utilisateur d'une page avec example.com/node/add/dispo?arg1=1&arg2=2 vers le même type d'URL. Mais quand je fais simplement une drupal_goto(request_uri());, cela redirige mon utilisateur vers example.com/node/add/dispo%25F%3C etc ....

J'ai essayé un str_replace mais cela n'a pas fonctionné.

Souhaitez-vous une solution?

11
Gregory Kapustin

drupal_goto() accepte un paramètre $options à transmettre à la fonction url() . Vous pouvez passer une chaîne de requête comme celle-ci:

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

Cet exemple sera transmis à/path? Foo = bar

32
Clive

C'est la même chose que la réponse de Clive. C'est correct IMO mais je voulais juste ajouter la réponse qui convient à votre cas d'utilisation 1: 1.

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

Vous vouliez appeler drupal_goto() au même emplacement que l'actuel.

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

current_path () retourne node/add/dispo; drupal_get_query_parameters () renvoie tous les paramètres $_GET sauf $_GET['q'] qui est le nœud de chemin interne/add/dispo.

Lorsque vous appelez drupal_goto(), Drupal peut reconstruire le même URI auquel envoyer l'utilisateur.

13
AyeshK

Vous pouvez également utiliser drupal_goto($GLOBALS['base_root'] . request_uri());

Notez qu'il n'est pas identique à drupal_goto(request_uri()); où le paramètre passé est encodé en url comme s'il s'agissait d'un chemin interne drupal, qui est en fait la source de votre problème.

0
Anonymous