1. <?php
    2. 我们想要在部分路由上完全禁用浏览器缓存,比如验证码,或者其它要求不能在浏览器端缓存的页面,我们可以建立如下一个中间件来完成:
    3. app/Http/Middleware/NoHttpCache.php:
    4. <?php
    5. namespace App\Http\Middleware;
    6. use Closure;use Illuminate\Contracts\Routing\Middleware;
    7. use Illuminate\Http\Response;
    8. use Symfony\Component\HttpFoundation\Response as SymfonyResponse;
    9. class NoHttpCache implements Middleware {
    10. /**
    11. * Handle an incoming request.
    12. *
    13. * @param \Illuminate\Http\Request $request
    14. * @param \Closure $next
    15. * @return mixed
    16. */
    17. public function handle($request, Closure $next)
    18. {
    19. $response = $next($request);
    20. // 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) {
    21. $response = new Response($response);
    22. }
    23. /**
    24. * @var $headers \Symfony\Component\HttpFoundation\HeaderBag
    25. */
    26. $response->header('Pragma', 'no-cache');
    27. $response->header('Expires', 'Fri, 01 Jan 1990 00:00:00 GMT');
    28. $response->header('Cache-Control', 'no-cache, must-revalidate, no-store, max-age=0, private');
    29. return $response;
    30. }}
    31. 然后在 app/Http/Kernel.php $routeMiddleware 中注册它就可以在路由中使用了:
    32. ...use App\Http\Middleware\NoHttpCache;.../**
    33. * The application's route middleware.
    34. *
    35. * @var array
    36. */protected $routeMiddleware = [
    37. 'no_http_cache' => NoHttpCache::class,];
    38. routes.php 中对要禁用缓存的路由添加中间件:
    39. Route::get('foo/bar', ['middleware' => 'no_http_cache', function () {
    40. // ...}]);