その他 > その他 > LC_Page::sendRedirect()の$urlにGETパラメータを渡せない |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
mmmmm |
投稿日時: 2010/2/17 22:14
対応状況: −−−
|
新米 登録日: 2010/2/3 居住地: 投稿: 7 |
LC_Page::sendRedirect()の$urlにGETパラメータを渡せない 何処に書けばいいのかわからなかったのでここら辺に。
LC_Page::sendRedirect('hoge.php?a=1') としてもリダイレクト後のページにGETパラメータを引き継ぐことができません。 結果として、このメソッドをheader()関数として用いることができません。 仕様なのかもしれませんが、少々困ったので解決策を提示しておきます。 function sendRedirect($url, $isMobile = false ) { $netURL = new Net_URL($url); //GETパラメータを保存しておく $queryStringArray=$netURL->querystring; //今までの処理…略 //保存したGETパラメータを追加 if(is_array($queryStringArray)){ foreach($queryStringArray as $key=>$val){ $netURL->addQueryString($key, $val); } } //リダイレクト header("Location: " . $netURL->getURL()); exit(); } ちなみに原因はNet_URL::addRawQueryString()がそれまでのパラメータを全削除するせいです。 明らかにバグだと思うのですが中の人はバグじゃないとか言っています。 http://pear.php.net/bugs/bug.php?id=3942 |
seasoft |
投稿日時: 2010/2/21 2:42
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない 貴重な情報をありがとうございます。
今のところの EC-CUBE の標準実装では問題が発生していないようですが、カスタマイズの際に影響を受けるケースも想定されそうですね。 とりあえず、せっかくの情報が埋もれてしまうといけませんので、まずはチケットとして記録しておきました。 http://svn.ec-cube.net/open_trac/ticket/608
|
nanasess |
投稿日時: 2010/2/21 22:53
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない この場合は, $_SERVER['QUERY_STRING'] に含まれない GET パラメータを渡したいということですかね?
|
ramrun |
投稿日時: 2010/2/22 9:54
対応状況: −−−
|
仙人 登録日: 2006/11/3 居住地: 投稿: 789 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない 現状は例えば
foo.tplで <a href="foo.php?a=1">bar</a> foo.phpで LC_Page::sendRedirect('bar.php') とすれば bar.php?a=1 となるんじゃないでしょうか? テンプレート側でパラメータを書くか、コード内にパラメータを書くかの違いだとは思いますが... これって相対パスでもOKにするっていうことじゃないですよね? PHPがCGIで動作している場合は挙動が少々違うみたいです。 |
seasoft |
投稿日時: 2010/2/23 1:17
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない 最新コミュニティ版で、
$this->sendRedirect($this->getLocation(URL_CART_TOP) . '?a=1'); を試しましたら、正常に動作しますね。 チケットは再現不能として、一旦クローズしました。 http://svn.ec-cube.net/open_trac/ticket/608#comment:1
|
mmmmm |
投稿日時: 2010/2/23 8:26
対応状況: −−−
|
新米 登録日: 2010/2/3 居住地: 投稿: 7 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない >$_SERVER['QUERY_STRING'] に含まれない GET パラメータを渡したい
です。 私がこのメソッドに期待していた動作が Symfonyの$this->redirect(array('module' => 'foo', 'action' => 'bar', 'hoge' => 'fuga'));や CakePHPの$this->redirect('foo/bar/hoge/fuga');だったので、 任意の引数を渡せるものだと思っていました。 #転送前のリクエストパラメータが勝手に付加されるのも上記とは違いますがまあスルーで >foo.tplで > <a href="foo.php?a=1">bar</a> 今回、 if($foo){ LC_Page::sendRedirect('bar.php?hoge=1'); }else{ LC_Page::sendRedirect('bar.php?hoge=2'); } みたいなことを行いたかったので実装時に困ったのです。 引数の数なんかを変更すると影響範囲が大きそうだったので今回は手っ取り早く修正しましたが、 一番いいのは function sendRedirect($url, $isMobile = false, $variable=array() ) ではないかと思います。 >最新コミュニティ版で、 >$this->sendRedirect($this->getLocation(URL_CART_TOP) . '?a=1'); >を試しましたら、正常に動作しますね。 あれ? ソース見る限り駄目っぽい気がするんだけどなあ…? リダイレクトする前のリンクに一切クエリストリングが無いと Net_URL::addRawQueryString()が走らないのでそのせい、とかではないでしょうか? ・<a href="a.php"> →発生しない ・<a href="a.php?a=1"> →発生する |
nanasess |
投稿日時: 2010/2/23 10:50
対応状況: −−−
|
神 登録日: 2006/9/9 居住地: 投稿: 2314 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない 引用:
渡したいパラメータを $_SERVER['QUERY_STRING'] に代入してしまうというのは無しですか? |
seasoft |
投稿日時: 2010/2/25 12:38
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない > リダイレクトする前のリンクに一切クエリストリングが無いと
> Net_URL::addRawQueryString()が走らないのでそのせい、とかではないでしょうか? > ・<a href="a.php"> →発生しない > ・<a href="a.php?a=1"> →発生する 仰っている意味が分かりました。 HTTP リクエスト時に、パラメータ(クエリーストリング)を渡しているかで、動作が変わるということですね。 確かに、その通りです。 個人的には、mmmmm 様が冒頭で書かれているソースでも、良いのかなという印象です。
|
seasoft |
投稿日時: 2010/2/25 12:43
対応状況: −−−
|
神 登録日: 2008/6/4 居住地: 投稿: 7367 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない とりあえず、チケットを差し戻しました。
http://svn.ec-cube.net/open_trac/ticket/608#comment:2
|
mmmmm |
投稿日時: 2010/2/25 22:59
対応状況: −−−
|
新米 登録日: 2010/2/3 居住地: 投稿: 7 |
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない >渡したいパラメータを $_SERVER['QUERY_STRING'] に代入してしまうというのは無しですか?
まあ、今回の問題を解決するだけならそれで全然かまわないですが、 チュートリアルとかがどこかにあったとして、 「任意のGETパラメータつきでリダイレクトしたい場合、$_SERVER['QUERY_STRING']に代入してください」 とか書いてあったら私ならちょっと引きます。 >個人的には、mmmmm 様が冒頭で書かれているソースでも、良いのかなという印象です。 せっかくNet_URL使ってるのですから、 自力で'?a='.urlencode($a).'&b='.urlencode($b)とか 書かずに済ませられるのであればそれにこしたことはないんじゃないかと個人的には思います。 自分で書いておいてなんですが。 #&amp;が&になってしまう… |
(1) 2 » |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |