Какова наилучшая практика в ZF для сбора, подготовки и представления информации для запросов к БД? - PullRequest
0 голосов
/ 18 декабря 2010

Я новичок в Zend Framework и борюсь с проблемой, которая кажется простой, но трудно решаемой (по крайней мере, для меня).

У меня есть контроллер с индексом и списком действий.В индексном действии я собираю пользовательский ввод для построения запроса, подготавливаю запрос Db Select и использую пространство имен сеанса для его сохранения.В списке действий запрос извлекается из пространства имен сеанса и представляется в виде сетки.

Проблема заключается в том, что дублирование веб-страницы в браузере сохраняет старый сеанс.Как лучше всего решить эту проблему?Я знаю, что это не очень хорошая практика использовать сессии таким образом, но я не могу найти альтернативу.

Вот чего я хочу достичь:

класс QueryController extends Zend_Controller_Action {

public function indexAction()
{
    $form = new Application_Form_Query();
    $form->submit->setLabel('Search');
    $this->view->form = $form;  
    if ($this->getRequest()->isPost()) {
        $formData = $this->getRequest()->getPost();
       // here ideally I would like to redirect to listAction with $formData 
       // but don't know how to achieve that, 
       // with _forward it displays both form and the grid on the same page
       // this tip was provided by ArneRie (thanks ArneRie)
            }
   public function listAction()
   {
   //  I want this action to be called everytime after form input and  
   //  cycle without going back to form (indexAction)
   //  get the $formData from indexAction() or reposted in listAction()
   //  build query based on $formData
   //  display grid
   //  re-post data back to request object
   }

}

Примечание: приветствуются любые другие предложения, например, лучшая практика с примером.

1 Ответ

0 голосов
/ 19 декабря 2010

Я предполагаю, что в действии индекса у вас есть форма, так почему бы не указать действию формы на контроллер списка для проверки, подготовки и выполнения запросов там?

Скажите нам, что именно вы хотите сделать, может быть, мы можем найти лучшерешение.

РЕДАКТИРОВАТЬ 21/12/2010

class QueryController extends Zend_Controller_Action{

   public function indexAction()
   {
   $form = new Application_Form_Query();
   $form->submit->setLabel('Search');
   $form->setMethod('post')->setAction('/query/list');
   $this->view->form = $form;  


   }
   public function listAction()
   {
      $session = new Zend_Session_Namespace('queryssesion'); 
      if (!isset($session->query)) { $session->query = $YOUR_QUERY }
      $form = new Application_Form_Query();
      if ($this->getRequest()->isPost() && $form->isValid($_POST)) 
      {
          $formData = $this->getRequest()->getPost();
          $session->query = $formData->query //example
      }
   }
}

Эта сессия должна работать, если нет, я думаю, мы можем попробовать с ajax и отправить запрос как POST;]

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