web-dev-qa-db-fra.com

Appel à la méthode non définie Symfony \ Component \ HttpFoundation \ Response :: header ()

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

11

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,
    // ....
];
20

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;
7
Pankit Gami

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

0