2011-07-14 16 views
3

私の質問は、次のようなもので、ユーザーに電子メールを送信する私から生成します:Zend FrameworkでURLのパラメータとしてURLを渡すにはどうすればよいですか?

http://mydomain.net/login/index/dest/%2Finvitation%2Fconfirm%2Fconfirmation_key%2F15116b5e4c61e4111ade679c10b3bf27

あなたが見ることができるように、私がやろうとしていることは、パラメータ「DEST」としてURLを渡しています。

404 Not Found - /login/index/dest//invitation/confirm/confirmation_key/15116b5e4c61e4111ade679c10b3bf27

は、これは私が電子メールを作成するために使用するビューです::

ログインページがどこでユーザーがログインした後にリダイレクトするように知っているように、しかし、私は次のように提示しています
<p> 
<?if($this->invitation->user):?> 
<a href='<?=$this->serverUrl($this->baseUrl().$this->url(array(
    'action'=>'index', 
    'controller'=>'login', 
    'dest'=>$this->url(array(
     'action'=>'confirm', 
     'controller'=>'invitation', 
     'confirmation_key'=>$this->invitation->confirmation_key 
    )) 
)));?>'>Log in to confirm this invitation.</a> 

//The view continues... 

URIエンコードされた項目を文字通りの値に変換しないようにする方法については、大変感謝しています。

+1

ログインコントローラにインデックスアクションがありません。 – iBiryukov

+1

それは間違っていますが、私はあなたがその結論にどのように来るかを知ることができました。しかし、私のインデックスアクションが欠落している場合は、通常、エラーコントローラが表示されます。この場合、URIエンコードされた項目をデコードしてからそのアドレスにナビゲートするのは、エンティティ(それがApacheかブラウザかどうかはわかりません)のようなものです。 –

答えて

6

simpel GETパラメータとして送信できませんか?

http://mydomain.net/login/index/?redirect=/invitation/confirm/confirmation_key/15116b5e4c61e4111ade679c10b3bf27

好きなのは、それはほとんどが実際に行うの方法です。 ChrisRが書いたもの

+2

最高のソリューションのように聞こえます。私は数ヶ月前にこのタイプのURLをZend Routerに結びつける簡単なクエリルータを作成しました。 http://fullycharged.org/articles/zend-framework/query-router – adlawson

+0

おかげでChrisRとAdlawson。標準取得パラメータを使用するという考えは私の心を越えましたが、私はそれが「想定されている」方法であることを確認したかったのです。主に、私はZend Frameworkの初心者であり、1つのことを行うには平均5つの方法があるからです。 –

1
  1. 答え
  2. は、なぜあなたはちょうどあなたもこのようなあなたのリンクをアップグレードすることができ$_SERVER['referer']
+0

これに '$ _SERVER ['referer']'を使用するには、フォームの隠しフィールドに値を入れておく必要があります。それをURLクエリ文字列に入れることは、私の意見では余分なDOM要素を追加するよりはるかにクリーンです。 – adlawson

+2

私はむしろそれのためにクッキーやセッションを使用したいと思います。フォームに隠れたフィールドは必要ありません(私の意見では、URLが間違ってインデックスされているかもしれません) –

+0

$ _SERVER ['referer']は動作しません彼らが直接ページにアクセスしない限り、あなたはそれらをログインページにリダイレクトし、それをいくつかの方法で保存しました。私は挑戦的にそれを行う方法があると思う。それらのうちのどれも「間違っている」と実際には見ないでください。 –

0

使用することはありませんabsolutlyです:

<a href='<?=$this->serverUrl($this->baseUrl().$this->url(array(
'action'=>'index', 
'controller'=>'login', 
'dest'=>base64_encode($this->url(array(
    'action'=>'confirm', 
    'controller'=>'invitation', 
    'confirmation_key'=>$this->invitation->confirmation_key 
)))) 

));?>'>Log in to confirm this invitation.</a>

しかし、/login/indexでは、あなたは悪いことに、オリジナルを取得するにはbase64_decode()を使用する必要があります。しかし、単純なクエリーストリングを使用できない場合は、URLを使って安全に文字列を渡す方法です。

http://en.wikipedia.org/wiki/Base64

関連する問題