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?

Gregory Kapustin
fonte

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

Clive
fonte
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.

AyeshK
fonte
Ó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.

Anônimo
fonte
-1

Na verdade, eu fiz funcionar usando header("location: " . $base_path . request_uri());

Gregory Kapustin
fonte
3
isto está errado. drupal_goto é feito por algum motivo, você sabe.
precisa saber é o seguinte