public function index(){
//....获取数据、其他操作等
//通过UA判断用户设备类型,渲染输出不同的模板
if ($this->request->isMobile()) {
return $this->fetch('手机端模板');
} else {
return $this->fetch('PC端模板');
}
}如果在配置文件里面开启“请求缓存”的话,如果移动端最先访问这个url,那么生成的缓存就是适配移动端的,pc端再访问这个url的话也会返回这个移动端的缓存文件给pc端。所以就需要把移动端和pc端分别生成不同的缓存。后来尝试了一下,直接在配置文件里面给缓存自定义key:
// 是否开启请求缓存 true自动缓存 支持设置请求缓存规则
'request_cache' => '__URL__' . (\think\facade\Request::isMobile() ? 'mobile' : 'pc'),
// 请求缓存有效期
'request_cache_expire' => null,
// 全局请求缓存排除规则
'request_cache_except' => [],通过上面的方式,实现了对同一个请求的url,分别给移动端和pc端生成不同的缓存。如果我在配置文件不开启自动请求缓存的情况下,我需要对某1个或者多个请求的url(控制器)分别生成移动端和PC端的缓存,应该怎么来实现呢 ?
我尝试了这样,但是不行
if ($this->request->isMobile()) {
//$this->request->cache('key_m');
return $this->fetch('index_m');
} else {
//$this->request->cache('key');
return $this->fetch('index');
} 最佳答案