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?

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


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.


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.


-1

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


3
c'est faux. drupal_goto est fait pour une raison que vous connaissez.
AyeshK
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.