12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- <?php
-
- namespace Illuminate\Http\Middleware;
-
- use Closure;
-
- class SetCacheHeaders
- {
- /**
- * Add cache related HTTP headers.
- *
- * @param \Illuminate\Http\Request $request
- * @param \Closure $next
- * @param string|array $options
- * @return \Symfony\Component\HttpFoundation\Response
- * @throws \InvalidArgumentException
- */
- public function handle($request, Closure $next, $options = [])
- {
- $response = $next($request);
-
- if (! $request->isMethodCacheable() || ! $response->getContent()) {
- return $response;
- }
-
- if (is_string($options)) {
- $options = $this->parseOptions($options);
- }
-
- if (isset($options['etag']) && $options['etag'] === true) {
- $options['etag'] = md5($response->getContent());
- }
-
- $response->setCache($options);
- $response->isNotModified($request);
-
- return $response;
- }
-
- /**
- * Parse the given header options.
- *
- * @param string $options
- * @return array
- */
- protected function parseOptions($options)
- {
- return collect(explode(';', $options))->mapWithKeys(function ($option) {
- $data = explode('=', $option, 2);
-
- return [$data[0] => $data[1] ?? true];
- })->all();
- }
- }
|