File tree Expand file tree Collapse file tree
src/Illuminate/Http/Middleware Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ <?php
2+
3+ namespace Illuminate \Http \Middleware ;
4+
5+ use Closure ;
6+
7+ class SetCacheHeaders
8+ {
9+ /**
10+ * Add cache related HTTP headers.
11+ *
12+ * @param \Illuminate\Http\Request $request
13+ * @param \Closure $next
14+ * @param string|array $options
15+ * @return \Symfony\Component\HttpFoundation\Response
16+ * @throws \InvalidArgumentException
17+ */
18+ public function handle ($ request , Closure $ next , $ options = [])
19+ {
20+ $ response = $ next ($ request );
21+
22+ if (! $ request ->isMethodCacheable () || ! $ response ->getContent ()) {
23+ return $ response ;
24+ }
25+
26+ if (is_string ($ options )) {
27+ $ options = $ this ->parseOptions ($ options );
28+ }
29+
30+ if (isset ($ options ['etag ' ]) && $ options ['etag ' ] === true ) {
31+ $ options ['etag ' ] = md5 ($ response ->getContent ());
32+ }
33+
34+ $ response ->setCache ($ options );
35+ $ response ->isNotModified ($ request );
36+
37+ return $ response ;
38+ }
39+
40+ /**
41+ * Parse the given header options.
42+ *
43+ * @param string $options
44+ * @return array
45+ */
46+ protected function parseOptions ($ options )
47+ {
48+ return collect (explode ('; ' , $ options ))->mapWithKeys (function ($ option ) {
49+ $ data = explode ('= ' , $ option , 2 );
50+
51+ return [$ data [0 ] => $ data [1 ] ?? true ];
52+ })->all ();
53+ }
54+ }
You can’t perform that action at this time.
0 commit comments