Salut, j'utilisais un middleware cors qui semble fonctionner correctement jusqu'à ce que j'ajoute Laravel Passport maintenant il y a un problème avec cela .. il montre l'erreur
Call to undefined method Symfony\Component\HttpFoundation\Response::header() on line number 36
Voici mon middleware:
<?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;
}
}
le problème est après la condition if .. Toute aide sera appréciée merci
Salut, j'ai fait face au même problème. Il semble que ce soit une erreur dans Passport et de nombreux développeurs sont dans la même situation. Je viens de trouver la solution à ce problème. La raison pour laquelle nous obtenons cette erreur est que l'objet Response que nous obtenons dans middleware
est généralement une instance de la classe Illuminate\Http\Response
Que nous pouvons définir des en-têtes de réponse en utilisant la méthode header('Header-Key', 'Header-Value')
tandis que le La demande gérée par Passport sera une instance de Symfony\Component\HttpFoundation\Response
C'est pourquoi nous avons eu l'erreur Call to undefined method Symfony\Component\HttpFoundation\Response::header()
Voici le code que j'utilise pour résoudre cette erreur et maintenant tout fonctionne bien. J'espère que cela aide d'autres développeurs à se faire une idée de la façon de le réparer puis de s'adapter à leur code.
$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;
Et dans mon Kernel.php
protected $middleware = [
\App\Http\Middleware\Cors::class,
// ....
];
Il semble que de votre application vous obtenez le HttpFoundation\Response
, qui n'a pas la méthode header
. Vous pouvez donc essayer de définir l'en-tête sur la variable headers
de la HttpFoundation\Response
.
foreach ($headers as $key => $value)
$response->headers->set($key, $value);
return $response;
J'ai eu ce problème quand j'ai fait ça
return Response::stream($callback, 200, $headers);
Je le résout en mettant simplement une barre oblique (\) avant une réponse comme ceci:
return \Response::stream($callback, 200, $headers);
Essayez cette solution: merci