drupal_goto(request_uri())は、URLの「?」、「=」、「&」を置き換えます


11

example.com/node/add/dispo?arg1=1&arg2=2のページから同じタイプのURLにユーザーをリダイレクトする必要があります。しかし、単にを実行するdrupal_goto(request_uri());と、ユーザーはexample.com/node/add/dispo%25F%3Cなどにリダイレクトされます。

str_replaceを試しましたが、うまくいきませんでした。

回避策はありますか?

回答:


32

drupal_goto()関数に$options渡されるパラメーターを受け入れurl()ます。次のようなクエリ文字列を渡すことができます。

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

その例は/ path?foo = barに転送されます


私はそれがヘッダーよりもきれいだと思います(場所?
グレゴリー・カプスティン

2
本当に依存します。コードを見ると、drupal_goto()提供されたパラメーターに基づいてURLを作成し、それからheader()それ自体を呼び出します。主な違いは、drupal_exit()呼び出されることで、スクリプトにクリーンな出口を提供し、$_GET['destination']設定されている場合、関数に渡すパスをオーバーライドします。通常drupal_goto()は使用する必要がありますが、古き良きheader()がより適切な場合があります。あなたが何をする必要があるかによって異なります
クライブ

はい、ありがとう。これにはヘッダーを使用しますが、それでもdrupal_gotoはきれいだと思います。
グレゴリーカプ

options配列には、名前と値のペアを持つ配列クエリがあることに注意してください。したがって、宛先変数を使用してログインするための私のコードは次のようになります。
爬虫類

驚くべきことは何か新しいことを学ぶようになった
リシャブ

13

これはCliveの答えと同じです。IMOは正しいのですが、ユースケース1:1に合った答えを追加したかっただけです。

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

drupal_goto()現在の場所と同じ場所に電話したかった。

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

current_path()はnode / add / dispoを返します。drupal_get_query_parameters()は、内部パスnode / add / dispo $_GETを除くすべてのパラメーターを返します$_GET['q']

を呼び出すとdrupal_goto()、Drupalはユーザーを送信するために同じURIを再構築できます。


素晴らしい、私はクライヴが選ばれ続けているのであなたの答えを上げた。みなさん。
グレゴリー

0

使用することもできます drupal_goto($GLOBALS['base_root'] . request_uri());

drupal_goto(request_uri());渡されたパラメーターが実際に問題の原因である内部drupalパスであるかのようにurlencodeされる場所と同じではないことに注意してください。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.