问题描述
我正在为我的一个页面实现页面缓存。对于依赖性,我必须检查一个数组,该数组可以存在也可以不存在。可能的数组键手杖, 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();