2012-04-30 17 views
1

変数を$_SESSION変数に格納する際に問題があります。 私はZendフレームワークを使用しており、3ステップのアプリケーションフォームを作成しています。さて、最初のステップが完了すると、データをMySQLデータベースに保存し、返された挿入IDをセッション変数に格納します。それから私は別のコントローラにページを転送します(ステップ2)。リクエストを転送すると、すべて正常に動作し、セッション変数からIDを読み取ることができます。しかし、2番目のフォーム(ステップ2の同じコントローラをアクションとして持つ)を送信すると、セッションは失われます。私はvar_dumpを試して、NULLを返します。ここでZendフレームワークによるセッション永続性

はコードです:

public function organizationAction() 
{ 

    $this->view->vals=""; 
    $form=$this->getOrganizationForm(); 
    $this->aplid=$_SESSION['appid']; 
    var_dump($_SESSION); 
    $firsttime=$this->getRequest()->getParam('firsttime',0); 

    //if(null==$this->aplid) $this->_forward('index','index'); 
    if ($this->getRequest()->isPost() && $firsttime==0) { 
     if (!$form->isValid($_POST)) { 
      // Failed validation; redisplay form 
      $this->view->form = $form; 
      return false; 
     } 
     var_dump($_SESSION); 
     $values = $form->getValues(); 
     $db=new Util_Database(); 

     if($db->insertOrganization($values,$this->aplid)) 
      $this->_forward('final'); 
     else echo "An error occured while attempting to submit data. Please try agian"; 

    } 


    $this->view->form=$form; 
} 

は、ここでの問題は何ですか?私はsession_idをフォームに格納してから、session_start()の前に設定しようとしましたが、まったく新しいセッションが開始されます。助けてください!

+1

Zendフレームワークで作業するときに、直接$ _SESSION変数を使用しないでください(PHP独自のセッション関数もありません)。 Zendには、対応するクラスを持つ独自のセッション管理システムがあります。 ...あなたは文書を読んでいないという理由で投票を受けるべきです:P – olanod

+0

セッションを処理するために別々のクラスを持っているかどうか分かりませんでした。初心者から本を学んだ後、すぐに現実世界のアプリケーションを作成しようとするのは欠点です。ヘッドアップをありがとう! :) –

答えて

1

ステップ2で何か他のことが起こっているかどうかわからないので、これが役立つかどうかはわかりませんが、ここにはあります。
誤ってセッションデータを上書きしている可能性があります。ここに私が思いついたことがあります。

public function organizationAction() { 

     $this->view->vals = ""; 
     $form = $this->getOrganizationForm(); 
     $db = new Util_Database(); 
     //This will only submit the form if the is post and firsttime == 0 
     if ($this->getRequest()->isPost() && $this->getRequest()->getPost('firsttime') == 0) { 
      //if form is valid set session and save to db 
      if ($form->isValid($this->getRequest()->getPost())) { 
       //We only want to initialize the session this time, if we do it 
       //on the next pass we may overwrite the information. 
       //initialize session namespace 
       $session = new Zend_Session_Namespace('application'); 
       //get values from form, validated and filtered 
       $values = $form->getValues(); 
       //assign form value appid to session namespace 
       $session->appid = $form->getValue('appid'); 
       //assign session variable appid to property aplid 
       $this->aplid = $session->appid; 
       if ($db->insertOrganization($values, $this->aplid)) 
        $this->_forward('final'); 
       else 
        echo "An error occured while attempting to submit data. Please try agian"; 
      } else { 
       //if form is not vaild populate form for resubmission 
       //validation errors will display of form page 
       $form->populate($this->getRequest()->getPost()); 
      } 
     } 
     //if not post display form 
     $this->view->form = $form; 
    } 

P.S.もしあなたがZFに行くなら... ZFに行く! :)

関連する問題