2017-01-31 15 views
1

Я построил API с Laravel с промежуточным программным обеспечением CORS.Laravel 5: вызов Undefined Method Response :: header() при попытке доступа к данным через API?

<?php 

namespace App\Http\Middleware; 

use Closure; 

class Cors 
{ 

    public function handle($request, Closure $next) 
    { 
     return $next($request) 
      ->header('Access-Control-Allow-Origin', '*') 
      ->header('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS') 
      ->header('Access-Control-Allow-Headers','Content-Type, Authorization, X-XSRF-TOKEN'); 
    } 
} 

При попытке получить доступ к данным через API, localhost:8000/api/items, я получаю следующий URL-адрес на моем терминале Laravel и

Призыв к неопределенным метод Symfony \ Component \ HttpFoundation \ Response :: заголовок()

Я что-то упустил?

ответ

-1

попробуйте таким образом, это должно исправить ваши проблемы с CORS, объявив их в конструктор вашего класса. и это позволит вам работать API.

<?php 

namespace App \ Http \ Middleware;

использование Закрытие;

класса Cors {

общественной функция __construct (Request $ запрос) {

$request->header('Access-Control-Allow-Origin', '*'); 
    $request->header('Content-Type', 'text/plain'); 
} 

}

почему люди голосуют отрицательный ответ на этот? эта работа так же хорошо, как и другие, которые я использую в настоящее время на производственной площадке, я был первым ответом на решение для парня, который запрашивает эту помощь.

4

Я знаю, что это вроде поздно, но у меня была аналогичная проблема при использовании Symfony\Component\HttpFoundation\StreamedResponse.

Как вы сказали, что проблема была

Призыв к неопределенному методу ... :: заголовок()

Так ясно метод header нет на объекте.

Для меня решение должно было использовать метод headers, который возвращает вас \Symfony\Component\HttpFoundation\ResponseHeaderBag.

Используйте его так:

public function handle($request, Closure $next) 
{ 
    $response = $next($request); 
    $response->headers->set('Access-Control-Allow-Origin', '*'); 
    $response->headers->set('Access-Control-Allow-Methods', 'GET, POST, PUT, PATCH, DELETE, OPTIONS'); 
    $response->headers->set('Access-Control-Allow-Headers', 'Content-Type, Authorization, X-XSRF-TOKEN'); 
    return $response; 
} 
+0

работал для меня Laravel 5.5 спасибо – Mohannd