После ярости против этого в течение полутора дней и изо всех сил стараясь найти правильный способ сделать это довольно простым, я сдался и сделал следующее.Я до сих пор не могу поверить, что нет лучшего способа.
Вариант использования, который требует этого, - это простой список записей с формой вверху для добавления некоторых фильтров (через GET), возможно, сортировки некоторых столбцов и добавления Zend_Paginate для хорошей меры.Я столкнулся с проблемами при использовании помощника вида Url в своей части разбиения на страницы, но я подозреваю, что даже при простой сортировке и форме фильтра Zend_View_Helper_Url все равно будет падать.
Но я отвлекся.Мое решение состояло в том, чтобы добавить метод к моему базовому классу контроллера, который объединяет все необработанные параметры строки запроса с существующими slashy-параметрами в стиле Zend и перенаправляет (но только при необходимости).Этот метод можно вызывать в любом действии, которое не должно обрабатывать сообщения POST.
Надеемся, кто-то найдет это полезным.Или даже лучше, найдите лучший способ:
/**
* Translate standard URL parameters (?foo=bar&baz=bork) to zend-style
* param (foo/bar/baz/bork). Query-string style
* values override existing route-params.
*/
public function mergeQueryString(){
if ($this->getRequest()->isPost()){
throw new Exception("mergeQueryString only works on GET requests.");
}
$q = $this->getRequest()->getQuery();
$p = $this->getRequest()->getParams();
if (empty($q)) {
//there's nothing to do.
return;
}
$action = $p['action'];
$controller = $p['controller'];
$module = $p['module'];
unset($p['action'],$p['controller'],$p['module']);
$params = array_merge($p,$q);
$this->_helper->getHelper('Redirector')
->setCode(301)
->gotoSimple(
$action,
$controller,
$module,
$params);
}