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

11

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 un drupal_goto(request_uri());, il 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?

Gregory Kapustin
la source

Réponses:

32

drupal_goto()accepte un $optionsparamètre à transmettre à la url()fonction. 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

Clive
la source
Je suppose que c'est plus propre que l'en-tête (emplacement?
Gregory Kapustin
2
Cela dépend vraiment, si vous regardez le code, tout ce que vous faites drupal_goto()est de construire une URL basée sur les paramètres fournis qu'elle appelle ensuite elle- header()même. Les principales différences sont ce qui drupal_exit()est appelé, donnant une sortie propre au script, et s'il $_GET['destination']est défini, cela remplacera le chemin que vous passez à la fonction. En règle générale, drupal_goto()il convient de l'utiliser, mais il arrive que le bon vieux header()soit plus approprié. Tout dépend de ce que vous devez faire
Clive
OK merci. Je vais utiliser l'en-tête pour celui-ci, mais je suppose que drupal_goto est plus propre.
Gregory Kapustin
notez que le tableau d'options a une requête de tableau avec une paire nom et valeur. Donc mon code pour me connecter avec une variable de destination ressemble à ceci: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
reptilex
Incroyable a appris quelque chose de nouveau
Rishab
13

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 endroit que l'actuel.

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

current_path () retourne node / add / dispo; drupal_get_query_parameters () retourne tous les $_GETparamètres sauf celui $_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.

AyeshK
la source
Génial, j'ai augmenté votre réponse en gardant Clive choisi. Merci à tous.
Gregory Kapustin
0

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

Notez que ce n'est pas la même chose que drupal_goto(request_uri());lorsque le paramètre passé est encodé en url comme s'il s'agissait d'un chemin drupal interne, qui est en fait la source de votre problème.

Anonyme
la source
-1

En fait, je l'ai fait fonctionner en utilisant header("location: " . $base_path . request_uri());

Gregory Kapustin
la source
3
c'est faux. drupal_goto est fait pour une raison que vous connaissez.
AyeshK