2009-08-14 31 views

答えて

0

あなたは302を使用して、これらのページ

  • form.php
  • processForm.php
  • displayId.php
を持っていると仮定すると

header('HTTP/1.1 302 Found'); 
header('Location: displayId.php?id=5'); 
die(); 

をリダイレクト実装することによってこれを行うことができます

Form.phpはフォームのみを表示し、POST経由でデータをprocessForm.phpに送信します。 processForm.phpの中でデータを解析し、displayId.phpにGETパラメータで表示したいリダイレクトを発行することができます。

ユーザーがページ(displayId.php)をリフレッシュすると、フォームデータが再処理されないこの方法です。

+0

私はZend Frameworkの中でどのようにできるのかもっと興味があります。 – db83

+0

実際には、302ではなく303を使用してください。 –

+0

良い点、それを指摘してくれてありがとう、別のことを学んだ。 –

3

Zend Frameworkを使用したリダイレクト後のパターンは通常、フォームのアクションを空にして(それ自体にポストします)、フォームを再度表示したくないときにリダイレクトする(成功すると) 。

public function newAction() { 
    $form = new Form_Foo(); 
    if($this->_request->isPost()) { 
     if($form->isValid($this->_request->getPost()) { 
      //save or whatever 
      return $this->_redirect('path/to/success'); 
     } 
     // else fall through 
    } 
    $this->view->form = $form; 
} 
+0

フォームデータが有効な場合、私はそれに対して何らかの処理を行います。処理の出力を、ユーザーがリダイレクトされたビューページに渡すにはどうすればよいですか? – db83

3
if ($this->isPost()) { 
    // Check validation 
    if ($error) { 
     $dataToMove = array(); 
     // $dataToMove is array that you want to pass with redirect 
     // It can be an array of errors or form data that user has entered 

     // Use FlashMessenger helper to pass data to redirection via Zend_Session 
     $this->_helper->getHelper('FlashMessenger')->addMessage($dataToMove); 

     // And redirect page to form url 
     $this->_helper->getHelper('Redirector')->goToUrl('/form/url/'); 
} 

// If not posted, get data from FlashMessenger 
$data = $this->_helper->getHelper('FlashMessenger')->getMessages(); 

// And assign to view or make that you want 
$this->view->formData = $data; 
+0

私はリダイレクトして成功/エラーメッセージを残すことができるので、この回答が気に入っています。 –

1

これは古いポストの人々はまだ答えをここに来るので、私はもう少しを支援しましょうですが。

リダイレクトフォームは素晴らしいと便利ですが、我々はまだボタンをクリックして戻ってその方法を再送信からpepleを防止されていません。

解決策は、フォームをポップアップとして表示し、完了すると(jqueryで簡単に実行できます)、またはトランザクションごとに一意のIDを生成し、以前にidが使用されていたかどうかを確認することです。 の記事を参照してください。http://www.boutell.com/newfaq/creating/stoprefresh.html

はそれがお役に立てば幸いです。

0

私はあなたのZend Frameworkでこれを実行しようとしているが、私はちょうど私が同じ機能の後だと言っています知っています。すべてをZFに移動しましたが、この機能が組み込まれていないことにはかなり失望しています。

私はすべてのフォームをprocess.phpに送信して、すべてのGET、POSTリクエストを処理してから結果を保存しましたあなたの新しい場所にあなたをリダイレクトしました。

$ _SESSION ['post_data']が設定されていれば$ _POST = $ _SESSION ['post_data']となります。それをセッションから削除します。

これは素晴らしかったが、今私はZF:Dで同じことが必要になるだろうと私は言う...私は誰もがダイアログをデータを再送信することを求めて表示されたいと思っていないと思って少し失望..地獄それはあなたのエンドユーザに意味ですか?何もない!

関連する問題