こんにちは私は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オブジェクトは通常、メソッドheader('Header-Key', 'Header-Value')
を使用してResponseヘッダーを設定できる_Illuminate\Http\Response
_クラスのインスタンスであるためです。 Passportによって処理されるのは_Symfony\Component\HttpFoundation\Response
_のインスタンスであり、そのためエラーCall to undefined method 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,
// ....
];
_
アプリケーションから、header
メソッドのないHttpFoundation\Response
を取得しているようです。そのため、代わりに、ヘッダーをHttpFoundation\Response
のheaders
変数に設定してみることができます。
foreach ($headers as $key => $value)
$response->headers->set($key, $value);
return $response;
私がこれをしたときに私はこの問題を得ました
return Response::stream($callback, 200, $headers);
私はこのようにResponseの前にスラッシュ(\)を置くだけで解決します:
return \Response::stream($callback, 200, $headers);
この解決策を試してください:ありがとう