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.