我在laravel 5项目中启用了路由缓存。 我想跳过特定路线视图上的缓存。
然后我在互联网上找到了这篇文章:
https://laravel-tricks.com/tricks/invalidate-browser-cache-route-middleware
它已经很老了,所以我做了如下修改:
添加在:Http / Kernel.php
protected $routeMiddleware = [
....
'nohttp-cache' => NoHttpCache::class,
....
];
在Http / Middleware / NoHttpCache.php中创建的类</ p>
namespace App\Http\Middleware;
use Closure;
//use Illuminate\Http\Response;
//use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
class NoHttpCache {
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$response = $next($request);
// This step is only needed if you are returning
// a view in your Controller or elsewhere, because
// when returning a view `$next($request)` returns
// a View object, not a Response object, so we need
// to wrap the View back in a Response.
// if ( ! $response instanceof SymfonyResponse)
// {
// $response = new Response($response);
// }
/**
* @var $headers \Symfony\Component\HttpFoundation\HeaderBag
*/
$response->header('Pragma', 'no-cache');
$response->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');
$response->header('Cache-Control', 'no-cache, must-revalidate, no-store, max-age=0, private');
return $response;
}
}
我认为Laravel 5中没有理由将$ response包装在Response中。 然后只需添加浏览器缓存的“ invalidation”指令即可。...
它似乎可以在添加以下中间件的测试路径上工作:
在code / routes / web.php中
....
Route::get('/', 'MyController@index')->name('test')->middleware('nohttp-cache');
....
现在的问题是...
答案 0 :(得分:0)
您可以使用Joseph Silber的Laravel页面缓存插件,该插件旨在缓存HTTP GET响应以快速加载页面。
这是一个链接。希望有帮助。