2011-06-10 2 views
3

Я реализовал представление action +, в котором перечислены все строки в базе данных, и позволяет вам разбивать их на страницы с помощью zend_paginator. Я также написал action + view, который принимает сообщение формы (или get), строит запрос Solr и возвращает адаптер zend_paginator на страницу по результатам.Каков самый идиоматический способ разбиения на страницы результатов поиска, выполненных с использованием zend_form

Проблема, с которой я столкнулся, заключается в том, как разбивать мой запрос после обратной передачи, это относительно сложная форма поиска (8 полей для поиска).

Опции, насколько я могу видеть, являются:

  • Переместить параметры, которые размещены на новый адрес и перенаправлять
  • Написать свой собственный Paginator, сохраняющих запрос строковые параметры
  • Сериализовать результаты формы сообщение в сессии и получить его оттуда, когда pagrating

Какой из них является самым zend/php способом его выполнения - и, что более важно, быстрее всего реализовать? ПОМОЩЬ !!!!! Спасибо.

+1

Это хороший вопрос. Я использовал первый подход: принимаю параметры в сообщении, затем перенаправляю маршрут, заполненный параметрами, в которых я выполняю поиск, разбивку на страницы и т. Д. Но я признаюсь, что я никогда не был им доволен (два HTTP-запроса для первый поиск). Мне никогда не нравился подход к сеансу b/c. Я хочу, чтобы эти страницы результатов поиска были (постоянно) URL-адресами. Заинтересованы, какие ответы мы получаем. –

+0

@David Есть ли причина принять параметры в сообщении в первую очередь? Меня удивляет, что поиск - это довольно «GETty» операция ... –

+0

Я рад, что действие формы должно получиться, но это не очень хорошо сочетается с управлением paginator по двум причинам. Во-первых, элемент управления paginator, игнорирующий поле игнорирует, выбрасывает строку запроса из связанных с ней ссылок страницы, во-вторых, элемент управления paginator добавляет элементы для хранения номера страницы в путь URL, а не строку запроса, что предполагает, что я должен поместить параметры поиска в URL-адрес. –

ответ

2

Я не буду принимать этот ответ, пока не убежу, что у кого-то нет лучшего, но я принял решение. Я пошел на шаблон PRG (post-redirect-get).

if ($request->isPost()) { 
     if ($form->isValid($request->getPost())) { 
      return $this->_helper->redirector('index','contact',NULL,array_filter($form->getValues())); 
     } 
    } 

Это перенаправляет на URL с содержанием формы в качестве параметров - www.url.com/form/param1/val/param2/val

командной полоски array_filter все пустые параметры и это означает, вы получаете хороший чистый, закладок, удобный URL-адрес, который zend_paginator работает без коробки.