バージョン選択

フォーラム

メニュー

オンライン状況

32 人のユーザが現在オンラインです。 (12 人のユーザが フォーラム を参照しています。)
登録ユーザ: 0
ゲスト: 32
もっと...

サイト内検索

その他 > その他 > 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
居住地:
投稿: 7333
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
貴重な情報をありがとうございます。

今のところの EC-CUBE の標準実装では問題が発生していないようですが、カスタマイズの際に影響を受けるケースも想定されそうですね。

とりあえず、せっかくの情報が埋もれてしまうといけませんので、まずはチケットとして記録しておきました。

http://svn.ec-cube.net/open_trac/ticket/608


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

nanasess
投稿日時: 2010/2/21 22:53
対応状況: −−−
登録日: 2006/9/9
居住地: 大阪
投稿: 2202
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
居住地:
投稿: 7333
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


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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
居住地: 大阪
投稿: 2202
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
引用:

mmmmmさんは書きました:

>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() )
ではないかと思います。



渡したいパラメータを $_SERVER['QUERY_STRING'] に代入してしまうというのは無しですか?
seasoft
投稿日時: 2010/2/25 12:38
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
> リダイレクトする前のリンクに一切クエリストリングが無いと
> Net_URL::addRawQueryString()が走らないのでそのせい、とかではないでしょうか?
> ・<a href="a.php">    →発生しない
> ・<a href="a.php?a=1">  →発生する

仰っている意味が分かりました。

HTTP リクエスト時に、パラメータ(クエリーストリング)を渡しているかで、動作が変わるということですね。

確かに、その通りです。


個人的には、mmmmm 様が冒頭で書かれているソースでも、良いのかなという印象です。


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

seasoft
投稿日時: 2010/2/25 12:43
対応状況: −−−
登録日: 2008/6/4
居住地:
投稿: 7333
Re: LC_Page::sendRedirect()の$urlにGETパラメータを渡せない
とりあえず、チケットを差し戻しました。
http://svn.ec-cube.net/open_trac/ticket/608#comment:2


----------------
Seasoft
こちらでの投稿は、アイディア程度に留めさせていただいております。
個別案件の作業は有償で承っております。お気軽にご相談ください。

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 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン



統計情報

総メンバー数は74,797名です
総投稿数は104,246件です

投稿数ランキング

1
seasoft
7333
2
468
3217
3
AMUAMU
2712
4
nanasess
2202
5
umebius
2085
6
yuh
1664
7
red
1525
8
h_tanaka
1189
9
tsuji
942
10
fukap
907
11
shutta
835
12
tao_s
794
13 ramrun 789
14 karin 689
15 sumida 641
16
homan
633
17 DELIGHT 572
18
patapata
502
19
flealog
485
20 tonton 437


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.