drupal_goto (request_uri ()) sostituisce il mio '?', '=' e '&' in url


11

Devo reindirizzare l'utente da una pagina con example.com/node/add/dispo?arg1=1&arg2=2 allo stesso tipo di URL. Ma quando faccio semplicemente un drupal_goto(request_uri());, reindirizza il mio utente a example.com/node/add/dispo%25F%3C ecc ....

Ho provato a str_replace ma non ha funzionato.

Avresti qualche soluzione?

Risposte:


32

drupal_goto()accetta un $optionsparametro da trasmettere alla url()funzione. È possibile passare una stringa di query in questo modo:

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

Quell'esempio verrà inoltrato a / path? Foo = bar


Immagino sia più pulito dell'intestazione (posizione?
Gregory Kapustin,

2
Dipende davvero, se guardi il codice tutto drupal_goto()ciò che fa è creare un URL basato sui parametri forniti che poi chiama header()su se stesso. Le principali differenze sono drupal_exit()chiamate, dando una chiara uscita allo script, e se $_GET['destination']impostato, sovrascriveranno il percorso che si passa alla funzione. Generalmente drupal_goto()dovrebbe essere usato, ma ci sono occasioni in cui il buon vecchio header()è più appropriato. Dipende solo da cosa devi fare
Clive

Ok grazie. Userò l'intestazione per questo, ma suppongo che drupal_goto sia più pulito.
Gregory Kapustin,

si noti che l'array di opzioni ha una query di array con nome e coppia valore. Quindi il mio codice per accedere con una variabile di destinazione è simile al seguente: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
reptilex,

Incredibile ho imparato qualcosa di nuovo
Rishab,

13

Questa è la risposta di Clive. È corretto IMO ma volevo solo aggiungere la risposta adatta al tuo caso d'uso 1: 1.

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

Volevi chiamare drupal_goto()nella stessa posizione di quella corrente.

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

current_path () restituisce node / add / dispo; drupal_get_query_parameters () restituisce tutti i $_GETparametri tranne $_GET['q']il nodo percorso interno / add / dispo.

Quando chiami drupal_goto(), Drupal può ricostruire lo stesso URI a cui inviare l'utente.


Fantastico, ho aumentato la tua risposta mentre continuo a scegliere Clive. Grazie a tutti voi.
Gregory Kapustin,

0

Puoi anche usare drupal_goto($GLOBALS['base_root'] . request_uri());

Si noti che non è lo stesso in drupal_goto(request_uri());cui il parametro passato viene urlencodificato come se fosse un percorso drupal interno, che in realtà è la fonte del problema.


-1

In realtà l'ho fatto funzionare usando header("location: " . $base_path . request_uri());


3
questo è sbagliato. drupal_goto è fatto per qualche motivo che conosci.
AyeshK,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.