laravel页面静态化-spatie/laravel-responsecache

1、安装

$ composer require spatie/laravel-responsecache
$ php artisan vendor:publish --provider="Spatie\ResponseCache\ResponseCacheServiceProvider"

2、使用

全局使用

将中间件定义在 web 中间件组中,在不使用 doNotCacheResponse 时会缓存所有的 GET 请求。

扩展包也提供了一个 doNotCacheResponse 中间件,用于说明哪些路由不需要缓存。

修改 app/Http/Kernel.php

protected $middlewareGroups = [
   'web' => [
       // 缓存响应
       \Spatie\ResponseCache\Middlewares\CacheResponse::class,
   ],
   protected $routeMiddleware = [
    // 不缓存的中间件
   'doNotCacheResponse' => \Spatie\ResponseCache\Middlewares\DoNotCacheResponse::class,
];
//不缓存的路由定义
Route::get('/', 'IndexController@index')->name('root')->middleware('doNotCacheResponse');

指定页面缓存
修改app/Http/Kernel.php

protected $routeMiddleware = [
  	// 需要缓存的响应
    'cacheResponse' => \Spatie\ResponseCache\Middlewares\CacheResponse::class,
];

这时只针对需要缓存的路由使用 cacheResponse 中间件即可,例如:

//对首页进行缓存,第二个参数是缓存时间,单位是分钟,这里缓存 60 分钟。
Route::get('/', 'IndexController@index')->name('home')->middleware('cacheResponse:60');

清除缓存
如果后台将数据进行修改或者删除时,我们需要清除缓存。

//命令清除所有缓存
php artisan responsecache:clear  
//方法清除所有缓存
ResponseCache::clear(); 
//指定某个路由删除缓存
ResponseCache::forget(route('root'));

注意

1、不缓存 ajax 请求;不缓存 testing 环境(APP_ENV=testing)或者 console 模式下的请求;
2、只缓存 GET 请求;只缓存成功的响应或者状态码在 300 至 400 之间跳转的响应。
3、有登录信息的页面不适合缓存,如果必须要缓存,要改成js动态的。
4、csrf token 也会被缓存,再次提交表单时会验证失败,所以有表单的页面不要设置这样的缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值