2012-02-06 3 views
0

送信ボタンをクリックすると、ページが次のページにリダイレクトされますか?Zendのコントローラを介してページをリダイレクトする方法

header('Location: /pdp/policy-info.phtml'); 

私は上記のコードをコントローラコードに書きましたが、私は上記のページにリダイレクトできません。それは同じページにとどまります。 ファイル名はview内でpolicy-info.phtmlと呼ばれます。

一度リダイレクトすると、$ _POSTを通じてフォーム値にアクセスできますか? または代替手段があります。

答えて

7

OKあなたはいくつかの概念が欠落することができるようにそれは私に聞こえる:

  • あなたはPHTMLファイルにリダイレクトすることはありません。 (カスタム書き換え/ルートルールを書いていない限り)ZendはMVCアーキテクチャを使用していますが、URLは次のようになります。

    /module/controller/view/key1/value1/keyx/valuex/
    一般にzend URLはファイル拡張子で終了しません。また、ブラウザからビューファイルを直接呼び出すこともありません。

  • フォームタグでは、アクション属性を使用してフォームが送信される場所を指定します。

 
    $this->_redirect('/pdp/policy-info/'); 

    # maybe you want to execute some code and then execute 
    # additional code in another controller without re-bootstrapping 
    $this->_forward('policy-info', 'pdp'); 
:あなたのurlには、私は、PDPコントローラおよびポリシー情報アクション

 
    action="/pdp/policy-info/" 
  • あなたが使用することになり、あなたのコントローラとから提出フォームの後にリダイレクトしたい場合を想定しています

    http://framework.zend.com/manual/en/zend.controller.action.html#zend.controller.action.utilmethods

    • あなたがリダイレクトした場合、他の場所で(セッションのように)それらの値を保存しない限りPOSTにアクセスすることはできません。あなたが転送する場合、私は値がまだ2番目のアクションで利用できると信じています。
+0

唯一のオプションはredirectです。私はエラーチェックを行い、フォームページで検証して表示しています。セッション以外で別の方法があることを望みます。 zendのpostのように$ _SESSIONを使用する方法の例を教えてください。 – Micheal

+0

http://framework.zend.com/manual/en/zend.session.basic_usage.htmlがあなたの最善の解説になるでしょう。zendでは一般的に$ _SESSIONを使用しません。 "$ _SESSIONはPHPのグローバル名前空間で引き続き使用できますが、開発者は直接アクセスしないでください。" –

0

実際には、やりたいことを行う方法がいくつかあります。私はまだこの最初の方法を試していないが、それは動作するはずです。

  • isPost場合)(お使いのコントローラ/アクションから新しいveiwスクリプトをレンダリング:

    public function myAction(){ 
    $form = My_Form(); 
    $this->view->form = $form; 
    
    //if form is posted and submit = Submit 
    if ($this_request->isPost() && $this_request->getPost()->submit == 'Submit') { 
        if ($form->isValid($this->_request->getPost()) { 
        //this is where you want to capture form data 
        $data = $form->getValues(); 
        //render a new viewscript or _forward to a new action and perform your processing there. 
        $this->render('path to phtml file'); 
        //if user needs to press a button to accept submit = accept 
        ...do some more stuff... 
         } 
        }  
    } 
    

    私はこれを考えるか、いくつかのバリエーションが動作します。
    注:私は_forwardがリクエストオブジェクトをリセットするとは思わないので、$ _POSTデータには影響しません。

はまた、このポリシー情報は、ユーザからの追加入力を必要としない場合、あなたは空白のアクションに簡単にだけ _forward('action')を可能性の情報だけであり、ルータは、ビュースクリプトが表示されます。

関連する問題