作为程序员一定要保持良好的睡眠,才能好编程

laravel 中间件中返回一个自定义的response

发布时间:2020-02-08




<?php

<?php

namespace Fruitcake\Cors;

use Closure;
use Asm89\Stack\CorsService;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
use Symfony\Component\HttpFoundation\Response;

class HandleCors
{
    /** @var CorsService $cors */
    protected $cors;

    public function __construct(CorsService $cors)
    {
        $this->cors = $cors;
    }

    /**
     * Handle an incoming request. Based on Asm89\Stack\Cors by asm89
     *
     * @param \Illuminate\Http\Request $request
     * @param \Closure $next
     * @return Response
     */
    public function handle($request, Closure $next)
    {
        Log::info('cros----------------------');
        Log::info('cros---' . var_export($this->shouldRun($request), true));
        //$response = $next($request);
        $response = new Response();

        $response->headers->set('Access-Control-Allow-Origin', $request->headers->get('Origin'));
        
        if ($this->options['maxAge']) {
            $response->headers->set('Access-Control-Max-Age', $this->options['maxAge']);
        }
        
        $allowMethods = $this->options['allowedMethods'] === true
            ? strtoupper($request->headers->get('Access-Control-Request-Method'))
            : implode(', ', $this->options['allowedMethods']);
        $response->headers->set('Access-Control-Allow-Methods', $allowMethods);
        
        $allowHeaders = $this->options['allowedHeaders'] === true
            ? strtoupper($request->headers->get('Access-Control-Request-Headers'))
            : implode(', ', $this->options['allowedHeaders']);
        \Illuminate\Support\Facades\Log::info('Access-Control-Request-Headers', $this->options['allowedHeaders']);
        \Illuminate\Support\Facades\Log::info('当前方法 cors:', [$request->getMethod()]);
        $response->headers->set('Access-Control-Allow-Headers', $allowHeaders);
        
        $response->setStatusCode(204);
        
        return $response;
                
//        return $response;
        // Add the CORS headers to the Response
        return $this->addHeaders($request, $response);
    }

   
    /**
     * Add the headers to the Response, if they don't exist yet.
     *
     * @param Request $request
     * @param Response $response
     * @return Response
     */
    protected function addHeaders(Request $request, Response $response): Response
    {
        if (!$response->headers->has('Access-Control-Allow-Origin')) {
            Log::info('Allow-Origin 存在吗?:');
            $response = $this->cors->addActualRequestHeaders($response, $request);
        }

        return $response;
    }
}



<?php


$response = new Response();

$response->headers->set('Access-Control-Allow-Origin', $request->headers->get('Origin'));

if ($this->options['maxAge']) {
    $response->headers->set('Access-Control-Max-Age', $this->options['maxAge']);
}

$allowMethods = $this->options['allowedMethods'] === true
    ? strtoupper($request->headers->get('Access-Control-Request-Method'))
    : implode(', ', $this->options['allowedMethods']);
$response->headers->set('Access-Control-Allow-Methods', $allowMethods);

$allowHeaders = $this->options['allowedHeaders'] === true
    ? strtoupper($request->headers->get('Access-Control-Request-Headers'))
    : implode(', ', $this->options['allowedHeaders']);
\Illuminate\Support\Facades\Log::info('Access-Control-Request-Headers', $this->options['allowedHeaders']);
\Illuminate\Support\Facades\Log::info('当前方法 cors:', [$request->getMethod()]);
$response->headers->set('Access-Control-Allow-Headers', $allowHeaders);

$response->setStatusCode(204);

return $response;