Zend Framework: Формирование цепочек: как я могу "сбросить $ this-> getRequest-> isPost ()"? - PullRequest
1 голос
/ 31 августа 2010

Это довольно простая вещь, но я не могу понять, как решить это "правильно" с Zend Framework:

Сценарий:

  1. Страница отображает форму 1,
  2. Форма отображения страницы 2

Это довольно простая вещь, но я не могу понять, как решить это "правильно" с Zend Framework:

Сценарий:

  1. Страница отображает форму 1,
  2. Страница отображает форму 2
class FooController extends Zend_Controller_Action {  
    ...  
    public function form1Action(){  
        if ($this->getRequest()->isPost()) {  
           // save data from form1 in database  
           $this->_forward('form2');  
        }  
        // display form1  
    }  
    public function form2Action(){  
        if ($this->getRequest()->isPost()) {  
           // save data from form2 in database  
           $this->_forward('somewherelese');  
        }  
        // display form2  
    }  
}  

Когда пользователь публикует форму form1, сначала выполняется условие if в действии form1Action (что я и хочу), но также условие if в форме form2Action.

Каким будет правильный способ "unset $ this-> getRequest () -> isPost ()"?

Примечание: формы создаются "вручную" (без использования Zend Form)

Ответы [ 3 ]

4 голосов
/ 31 августа 2010

У вас есть три варианта:

  1. Используйте _redirect вместо _forward.Переадресация переадресации по тому же запросу.Redirect создаст новый запрос. '
  2. Установите параметр в вашем вызове _forward, который вы можете проверить во второй форме: например, 'form' => 2. Дополнительная информация.
  3. Используйте встроенные многостраничные формы , которые включены в Zend_Form из коробки.
0 голосов
/ 06 марта 2011

Этот последний параметр у меня не работал.

$ this -> _ forward () создает новый экземпляр контроллера, поэтому установка переменной в первом случае не влияет на переменную в новом.

Моим решением было сделать статическую переменную $ _fromAction1 для совместного использования переменной между двумя экземплярами.

class FooController extends Zend_Controller_Action {
private static $_fromAction1 = false;
    ...  
    public function form1Action(){  
        if ($this->getRequest()->isPost()) {  
           // save data from form1 in database  
FooController::_fromAction1 = true;
           $this->_forward('form2');  
        }  
        // display form1  
    }  
    public function form2Action(){  
        if ($this->getRequest()->isPost() && !FooController::_formAction1) {  
           // save data from form2 in database  
           $this->_forward('somewherelese');  
        }  
        // display form2  
    }  
} 
0 голосов
/ 31 августа 2010

Вы всегда можете установить переменную класса в действии 1, и если это правда, не запускать код в действии 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...