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.