Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Http/Middleware/SetCacheHeaders.php
Строк: 136
<?php

namespace IlluminateHttpMiddleware;

use 
Closure;
use 
IlluminateSupportCarbon;
use 
IlluminateSupportCollection;
use 
IlluminateSupportStr;
use 
SymfonyComponentHttpFoundationBinaryFileResponse;
use 
SymfonyComponentHttpFoundationStreamedResponse;

class 
SetCacheHeaders
{
    
/**
     * Specify the options for the middleware.
     *
     * @param  array|string  $options
     * @return string
     */
    
public static function using($options)
    {
        if (
is_string($options)) {
            return static::class.
':'.$options;
        }

        return (new 
Collection($options))
            ->
map(function ($value$key) {
                if (
is_bool($value)) {
                    return 
$value $key null;
                }

                return 
is_int($key) ? $value "{$key}={$value}";
            })
            ->
filter()
            ->
map(fn ($value) => Str::finish($value';'))
            ->
pipe(fn ($options) => rtrim(static::class.':'.$options->implode(''), ';'));
    }

    
/**
     * Add cache related HTTP headers.
     *
     * @param  IlluminateHttpRequest  $request
     * @param  Closure  $next
     * @param  string|array  $options
     * @return SymfonyComponentHttpFoundationResponse
     *
     * @throws InvalidArgumentException
     */
    
public function handle($requestClosure $next$options = [])
    {
        
$response $next($request);

        if (! 
$request->isMethodCacheable() || (! $response->getContent() && ! $response instanceof BinaryFileResponse && ! $response instanceof StreamedResponse)) {
            return 
$response;
        }

        if (
is_string($options)) {
            
$options $this->parseOptions($options);
        }

        if (! 
$response->isSuccessful()) {
            return 
$response;
        }

        if (isset(
$options['etag']) && $options['etag'] === true) {
            
$options['etag'] = $response->getEtag() ?? ($response->getContent() ? hash('xxh128'$response->getContent()) : null);
        }

        if (isset(
$options['last_modified'])) {
            if (
is_numeric($options['last_modified'])) {
                
$options['last_modified'] = Carbon::createFromTimestamp($options['last_modified'], date_default_timezone_get());
            } else {
                
$options['last_modified'] = Carbon::parse($options['last_modified']);
            }
        }

        
$response->setCache($options);
        
$response->isNotModified($request);

        return 
$response;
    }

    
/**
     * Parse the given header options.
     *
     * @param  string  $options
     * @return array
     */
    
protected function parseOptions($options)
    {
        return (new 
Collection(explode(';'rtrim($options';'))))->mapWithKeys(function ($option) {
            
$data explode('='$option2);

            return [
$data[0] => $data[1] ?? true];
        })->
all();
    }
}
Онлайн: 1
Реклама