gpt4 book ai didi

php - 调用未定义的方法 Symfony\Component\HttpFoundation\Response::header()

转载 作者:可可西里 更新时间:2023-11-01 12:24:37 25 4
gpt4 key购买 nike

嗨,我正在使用一个 cors 中间件,在我添加 Laravel Passport 之前它似乎工作正常,现在它有问题..它显示错误

 Call to undefined method Symfony\Component\HttpFoundation\Response::header() on line number 36 

这是我的中间件:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Response;

class Cors
{

/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{

// ALLOW OPTIONS METHOD
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, DELETE',
'Access-Control-Allow-Headers' => "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers"
];


if ($request->getMethod() == "OPTIONS") {
// The client-side application can set only headers allowed in Access-Control-Allow-Headers
return Response::make('OK', 200, $headers);
}

$response = $next($request);
foreach ($headers as $key => $value)
$response->header($key, $value);
return $response;
}

}

问题是在 if 条件之后.. 任何帮助将不胜感激

最佳答案

您好,我遇到了同样的问题。这似乎是 Passport 中的错误,并且有许多开发人员处于相同的情况。我刚刚找到了解决这个问题的方法。我们得到这个错误的原因是因为我们在 middleware 中获取的 Response 对象通常是 Illuminate\Http\Response 类的实例,我们可以使用方法 设置 Response headers code>header('Header-Key', 'Header-Value') 而 Passport 处理的 Request 将是 Symfony\Component\HttpFoundation\Response 的一个实例,这就是为什么我们得到错误 调用未定义的方法 Symfony\Component\HttpFoundation\Response::header()

下面是我用来解决这个错误的代码,现在一切正常。我希望它能帮助其他开发人员了解如何修复它,然后适应他们的代码。

$response = $next($request);
$IlluminateResponse = 'Illuminate\Http\Response';
$SymfonyResopnse = 'Symfony\Component\HttpFoundation\Response';
$headers = [
'Access-Control-Allow-Origin' => '*',
'Access-Control-Allow-Methods' => 'POST, GET, OPTIONS, PUT, PATCH, DELETE',
'Access-Control-Allow-Headers' => 'Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Authorization , Access-Control-Request-Headers',
];

if($response instanceof $IlluminateResponse) {
foreach ($headers as $key => $value) {
$response->header($key, $value);
}
return $response;
}

if($response instanceof $SymfonyResopnse) {
foreach ($headers as $key => $value) {
$response->headers->set($key, $value);
}
return $response;
}

return $response;

在我的 Kernel.php

protected $middleware = [
\App\Http\Middleware\Cors::class,
// ....
];

关于php - 调用未定义的方法 Symfony\Component\HttpFoundation\Response::header(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43593351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com