drupal_goto (request_uri ()) substitui meu '?', '=' e '&' no URL


11

Preciso redirecionar o usuário de uma página com example.com/node/add/dispo?arg1=1&arg2=2 para o mesmo tipo de URL. Mas quando eu simplesmente faço um drupal_goto(request_uri());, ele redireciona meu usuário para example.com/node/add/dispo%25F%3C etc ...

Eu tentei um str_replace, mas não funcionou.

Você teria alguma solução alternativa?

Respostas:


32

drupal_goto()aceita um $optionsparâmetro a ser passado para a url()função. Você pode passar uma string de consulta como esta:

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

Esse exemplo será encaminhado para / path? Foo = bar


Eu acho que é mais limpo do que o cabeçalho (local?
Gregory Kapustin

2
Depende realmente, se você olhar para o código, tudo o que drupal_goto()faz é criar um URL com base nos parâmetros fornecidos, que ele mesmo chama header(). As principais diferenças são as drupal_exit()chamadas, fornecendo uma saída limpa para o script e, se $_GET['destination']estiver definido, substituirão o caminho que você passa para a função. Geralmente drupal_goto()deve ser usado, mas há ocasiões em que o bom e velho header()é mais apropriado. Depende apenas do que você precisa fazer
Clive

Ok obrigado. Vou usar o cabeçalho para este, mas ainda assim, acho que o drupal_goto é mais limpo.
Gregory Kapustin

observe que a matriz de opções possui uma consulta de matriz com par de nome e valor. Portanto, meu código para efetuar login com uma variável de destino se parece com: $ options = array ('query' => array ('destination' => 'internal / dashboard') drupal_goto ('user', $ options));
Reptilex

Incrível tem que aprender algo novo
Rishab

13

É o mesmo que a resposta de Clive. É IMO correto, mas eu só queria adicionar a resposta que melhor se adequa ao seu caso de uso 1: 1.

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

Você queria ligar drupal_goto()para o mesmo local que o atual.

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

current_path () retorna o nó / add / dispo; drupal_get_query_parameters () retorna todos os $_GETparâmetros, exceto o $_GET['q']que é o caminho interno node / add / dispo.

Quando você liga drupal_goto(), o Drupal pode reconstruir o mesmo URI para o qual enviar o usuário.


Ótimo, eu levantei sua resposta enquanto mantenho Clive escolhido. Thx todos vocês.
Gregory Kapustin

0

Você também pode usar drupal_goto($GLOBALS['base_root'] . request_uri());

Observe que não é o mesmo que drupal_goto(request_uri());onde o parâmetro passado é codificado em url como se fosse um caminho interno do drupal, que é realmente a fonte do seu problema.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.