Как выполнить запрос / найти CACHE с помощью PAGINATION CakePhp 2.x?

Я использую Cache::read() , Cache::write() в CakePhp для кэширования запросов.

Как обновить paginator params или CacheE paginator?

Легко кэшировать результат запроса, но как кэшировать $this->Paginator->params() тоже?

Я пытался использовать Cache::write() $this->Paginator->params() но как изменить $this->Paginator->params() после кеширования? Когда я делаю что-то вроде: …

 $this->Paginator->params['paging'][$model] = $paginator_params; 

… Я заметил:

 Indirect modification of overloaded element of CakeRequest has no effect 

Где и когда я могу переписать параметры PAGINATOR / задать кешированные параметры?

Благодарю.

Вам нужно кэшировать массив $this->request->params['paging'] .

И вам нужно добавить Paginator Helper в массив $helpers helpers. Если вы этого не сделаете, метод Render для помощника Paginator не будет вызван, а ссылки подкачки будут сломаны.

 $page = !isset($this->request->named['page']) ? '1' : $this->request->named['page']; $products = Cache::read('my_unique_cache_id_' . $page, 'query'); $paging = Cache::read('my_unique_cache_id_paging_' . $page, 'query'); if ($products && $paging) { $this->set('products', $products); $this->request->params['paging'] = $paging; }else{ $products = $this->paginate('Product'); Cache::write('my_unique_cache_id_paging_' . $page, $this->request->params['paging'], 'query'); Cache::write('my_unique_cache_id_' . $page, $products, 'query'); $this->set('products', $products); } 

Если кто-то придет сюда искать версию CakePHP 2.5+, следующее должно работать хорошо, используя Cache :: запомнить:

 list($products, $this->request->params['paging']) = Cache::remember('somestring', function() { return [$this->paginate('Articles'), $this->request->params['paging']]; }); 

У вас будет массив, $ products, который вы можете установить на свое представление для рендеринга.