yii2 pagecahe 数组依赖

问题描述

我正在为我的一个页面实现页面缓存。对于依赖性,我必须检查一个数组,该数组可以存在也可以不存在。可能的数组键手杖, usersearch['id']、usersearch['name']、usersearch['phone]。我还必须为这些值的任何更改添加依赖项。 此外,我必须清除缓存以进行任何更新或添加用户表中。 有没有可能的解决方案。? 提前致谢

解决方法

您可以使用变体

公共函数行为(){

    $usersearch = Yii::$app->requst->get('usersearch');
    return [
        [
            'class' => 'yii\filters\PageCache','only' => ['index'],'duration' => 60,'variations' => [
                 'YOUR_DYNAMIC_VALUE1','YOUR_DYNAMIC_VALUE2'
            ],'dependency' => [
                'class' => 'yii\caching\DbDependency','sql' => 'SELECT COUNT(*) FROM post',],];
}

参考 link

在你的情况下,你可以使用

'variations' => \Yii::$app->requst->get('usersearch')??[],

'variations' => [
    \/Yii::$app->requst->get('usersearch')['id'] ?? '',\Yii::$app->requst->get('usersearch')['name'] ?? '',\Yii::$app->requst->get('usersearch')['phone'] ?? '',]
,

您可以使用具有以下配置的 yii\caching\FileCache 组件。

首先,您在控制器的 init 函数中设置缓存:

Yii::$app->setComponents([
   'yourCacheName' => [
       'class' => \yii\caching\FileCache::class,'defaultDuration' => 1800,//cache duration in seconds
       'keyPrefix' => Yii::$app->getSession()->getId(). '_'
   ]
]);

在这里,参数 keyPrefix 设置为链接到会话 ID。因此,访问者看不到彼此的缓存页面。如果内容是静态且相等的,无论是用户还是会话,都可以去掉这个参数。

在必须缓存的视图中,您可以调用 beginCache 函数和依赖项,如下所示:

$this->beginCache('cache-id',[
    'cache' => Yii::$app->yourCacheName,// the name of the component as set before
    'variations' => [
       $usersearch['id'] ?? '',$usersearch['name'] ?? '',$usersearch['phone'] ?? '','dependency' => [
       'class' => \yii\caching\DbDependency::class,'sql' => 'SELECT count(*) FROM your_user_table'
    ]
]);

// your view


$this->endCache();