Maison  >  Article  >  développement back-end  >  Explication Yii 2.0 des méthodes de mise en cache des pages

Explication Yii 2.0 des méthodes de mise en cache des pages

巴扎黑
巴扎黑original
2017-08-13 11:30:00934parcourir

La mise en cache des pages fait référence à la mise en cache du contenu de la page entière côté serveur. Par la suite, lorsque la même page est demandée, le contenu sera récupéré du cache plutôt que régénéré. L'article suivant présente principalement des informations pertinentes sur la façon dont Yii2.0 utilise la mise en cache des pages. Les amis dans le besoin peuvent s'y référer.

Avant-propos

Cet article vous présente principalement le contenu pertinent sur la façon dont Yii2.0 utilise la mise en cache des pages et le partage pour votre référence et étude , jetons un coup d'œil à l'introduction détaillée.

J'ai initialement utilisé la mise en cache des pages et j'ai découvert que la méthode contenant les paramètres présentait des inconvénients. Elle ne pouvait mettre en cache que la première page, ce qui faisait que toutes les pages suivantes avec des paramètres différents affichaient la première page mise en cache. cache ; par conséquent, le cache des pages a été réécrit.

Exemple de code


<?php 


namespace common\lib;

use Yii;
use yii\caching\Cache;
use yii\di\Instance;
use yii\web\Response;
use yii\filters\PageCache as PCache;


/**
* 重写页面缓存,增加varByParam参数一列
*/
class PageCache extends PCache
{
 /**
 * 参数设置,默认无参数
 * 用法:&#39;varByParam&#39; => Yii::$app->request->get(&#39;id&#39;)
 * @var string
 */
 public $varByParam = &#39;&#39;;

 public function beforeAction($action)
 {
 if (!$this->enabled) {
  return true;
 }

 $this->cache = Instance::ensure($this->cache, Cache::className());

 if (is_array($this->dependency)) {
  $this->dependency = Yii::createObject($this->dependency);
 }

 $properties = [];
 foreach ([&#39;cache&#39;, &#39;duration&#39;, &#39;dependency&#39;, &#39;variations&#39;] as $name) {
  $properties[$name] = $this->$name;
 }
 $id = $this->varyByRoute ? $action->getUniqueId().$this->varByParam : __CLASS__;
 $response = Yii::$app->getResponse();
 ob_start();
 ob_implicit_flush(false);
 if ($this->view->beginCache($id, $properties)) {
  $response->on(Response::EVENT_AFTER_SEND, [$this, &#39;cacheResponse&#39;]);
  return true;
 } else {
  $data = $this->cache->get($this->calculateCacheKey());
  if (is_array($data)) {
  $this->restoreResponse($response, $data);
  }
  $response->content = ob_get_clean();
  return false;
 }
 }
}
 ?>

Utilisation :


[
&#39;class&#39; => &#39;common\lib\PageCache&#39;,
  &#39;only&#39; => [&#39;view&#39;],
  &#39;duration&#39; => 0, //永不过期
  &#39;varByParam&#39; => Yii::$app->request->get(&#39;id&#39;),
],

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn