2017-04-24 12 views
6

हाय मैं एक कॉर्स मिडलवेयर का उपयोग कर रहा था जो तब तक ठीक काम करता है जब तक मैंने लैरवेल पासपोर्ट जोड़ा नहीं है, इसमें कोई समस्या है .. यह त्रुटिअपरिभाषित विधि पर कॉल करें सिम्फनी घटक एचटीपीफ़ाउंडेशन प्रतिक्रिया :: हेडर()

दिखाता है
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; 
    } 

} 

मुद्दा अगर हालत के बाद .. किसी भी मदद appreaciated की जाएगी धन्यवाद

+0

आप अपने 'composer.json' फ़ाइल साझा कर सकते हैं ताकि हम एक librairies के संस्करण देख सकते हैं? –

+0

कृपया इसे आज़माएं: '$ प्रतिक्रिया-> शीर्षलेख-> सेट ($ कुंजी, $ मान)' –

+0

मैं इस धारणा के तहत था कि पासपोर्ट ने आपके लिए सीओआरएस संभाला? – Joe

उत्तर

3

ऐसा लगता है कि आपके आवेदन से आप HttpFoundation\Response प्राप्त कर रहे हैं, जिनमें header विधि नहीं है। तो इसके बजाय आप HttpFoundation\Response के headers चर पर हेडर सेट करने का प्रयास कर सकते हैं।

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

हाय मुझे एक ही समस्या का सामना करना पड़ा। ऐसा लगता है कि यह पासपोर्ट में एक त्रुटि थी और कई डेवलपर्स एक ही स्थिति में हैं। मुझे अभी इस मुद्दे का समाधान मिला है। हमें यह त्रुटि क्यों मिलती है क्योंकि middleware में प्रतिक्रिया ऑब्जेक्ट आमतौर पर Illuminate\Http\Response वर्ग का उदाहरण होता है जिसे हम header('Header-Key', 'Header-Value') विधि का उपयोग कर प्रतिक्रिया हेडर सेट कर सकते हैं जबकि पासपोर्ट द्वारा प्रबंधित अनुरोध 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, 
    // .... 
]; 
+0

बहुत बढ़िया दोस्त! मेरे जीवन को बचाया :) – jsd

+1

रोशनी प्रतिक्रिया सिम्फनी प्रतिक्रिया से फैली हुई है ताकि आप हमेशा प्रतिक्रिया का इलाज कर सकें जैसे कि यह अलग से संभालने के बजाय सिम्फनी प्रतिक्रिया थी। –

संबंधित मुद्दे