2012-04-30 6 views
1

У меня возникают проблемы с хранением переменных в переменной $_SESSION. Я использую структуру Zend и создаю трехэтапную форму заявки. Теперь, когда первый шаг выполняется, я храню данные в базе данных MySQL и сохраняю возвращаемый идентификатор в переменной сеанса. Затем я пересылаю страницу другому контроллеру (шаг 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

Не используйте переменную $ _SESSION напрямую (а также собственные функции сеанса php) при работе с картой Zend, это одна из тех вещей, которые они рекомендуют больше всего. 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! :)

Смежные вопросы