shouldBeCached($request); $ajaxRequest = $request->ajax(); //dd($cacheRow); if (!$hasTable || !$cacheRow || $ajaxRequest ||$request->post()) { return $next($request); } return $this->cacheResponse($request, $next, $cacheRow['cache_ttl']); } /** * @param LaravelRequest $request * @param Closure $next * @param $ttl * @return mixed */ protected function cacheResponse(LaravelRequest $request, Closure $next, $ttl) { $cacheKey = $this->getCacheKey($request->url()); if (\Cache::has($cacheKey)) { $content = \Cache::get($cacheKey); if($content) return \Response::make($this->getCachedContent($cacheKey, $request, $content), 200); else \Cache::forget($cacheKey); } $response = $next($request); \Cache::put($cacheKey, $response->getContent(), $ttl); return $response; } /** * add instrumentation to help with debug. Adding ?debug * to a cached url will precede the content with "CACHED" * * @param $cacheKey * @param $request * @param $content * @return string */ protected function getCachedContent($cacheKey, $request, $content) { $isDebugRequest = $request->exists('debug') || $request->exists('cache-info'); if ($isDebugRequest) { return $content.'
'; } if ($request->exists('cache-clear')) { \Cache::forget($cacheKey); return \Redirect::to($request->url()); } return $content; } //generate a cache key based on the url /** * @param $url * @return string */ protected function getCacheKey($url) { return 'SerenityNow.Cacheroute.' . str_slug($url); } /** * @param $request * @return bool */ protected function shouldBeCached($request) { $cacheRouteRows = \Cache::remember('SerenityNow.Cacheroute.AllCachedRoutes', \Config::get('cms.urlCacheTtl'), function () { return CacheRoute::orderBy('sort_order')->get()->toArray(); } ); // dd($request->is($request->path())); foreach ($cacheRouteRows as $cacheRow) { if (count($cacheRow) && $request->is($cacheRow['route_pattern'])) { return $cacheRow; } } return false; } }