Call to undefined method Symfony\Component\HttpFoundation\Response::header() Call to undefined method Symfony\Component\HttpFoundation\Response::header() php php

Call to undefined method Symfony\Component\HttpFoundation\Response::header()


Hi I faced the same problem. It seems like it was an error in Passport and there are many developers are in the same situation. I just found the solution to this issue. The reason why we get this error is because Response object we get in middleware is usually an instance of Illuminate\Http\Response class which we can set Response headers using the method header('Header-Key', 'Header-Value') whereas the Request handled by Passport will be an instance of Symfony\Component\HttpFoundation\Response that's why we got the error Call to undefined method Symfony\Component\HttpFoundation\Response::header()

Below is the code that I use to tackle this error and now everything works fine. I hope it helps other developers get the idea how to fix it and then adapt to their 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;

And in my Kernel.php

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


It seems that from your application you are getting the HttpFoundation\Response, which doesn't have the header method. So instead you can try to set the header to the headers variable of the HttpFoundation\Response.

foreach ($headers as $key => $value)    $response->headers->set($key, $value);return $response;


I got this problem when I did this

return Response::stream($callback, 200, $headers);

I solve it by simply putting forward slash ( \ ) before Response like this:

return \Response::stream($callback, 200, $headers);

Try this solution: Thanks