У меня были похожие проблемы с Zend_Paginator .Эти проблемы возникают только с Zend_Paginator_Adapter_DbTableSelect (у меня не было проблем с Zend_Paginator_Adapter_Array ).
Жирная часть имени файла кэша zend_cache---Zend_Paginator_3_
2b49905a9282f742e1cefafc53892794 выполнена с помощью функции _getCacheId (проверка Zend_Paginator ) на основе адаптера, переданного вконструкторПри каждом запросе paginator создает новый код, потому что адаптер никогда не совпадает в момент $_cache->load
и $_cache->save
.
Серийное значение md5 адаптера, используемого в качестве имени файла при сохранении данных вКеш отличается от того, который используется при чтении данных из кеша, если у вас включен профилировщик БД.Вы не должны использовать профилировщик БД для того, чтобы кэш Zend_Paginator работал (используйте его только на этапе разработки).
Другая найденная мной причина сбоя определяется этими двумя строками кода:
$offset = ($pageNumber - 1) * $this->getItemCountPerPage();
$items = $this->_adapter->getItems($offset, $this->getItemCountPerPage());
Они вызываются между $_cache->load
и $_cache->save
, и они добавляют значение limitcount и значение limitoffset для адаптера.Эти значения не устанавливаются при вызове $_cache->load
, поэтому имя файла на основе сериализованного значения md5 адаптера в этом случае также будет другим.
Они должны быть помещены до $_cache->load
.Вы можете создать класс paginator, который расширяет Zend_Paginator и модифицирует getItemsByPage .Добавьте две строки в начале, после $pageNumber = $this->normalizePageNumber($pageNumber)
.
Это сработало для меня.Я надеюсь, что это поможет и другим.