2015-06-02 9 views
2

Я использую Laravel 5 для своего приложения и для установки типа контента я использовал промежуточное ПО CORS, которое выглядит так.Невозможно добавить CORS для определенного маршрута в Laravel 5

public function handle($request, Closure $next) 
    { 
     return $next($request) 
      ->header('Access-Control-Allow-Credentials', 'true') 
      ->header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE') 
      ->header('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With') 
      ->header('Content-Type', 'application/json'); 

    } 

Это функция класса CORS.

Но, когда я возвращаю вид Blade, например auth/login, я получаю простой код HTML в браузере вместо получения фактического представления HTML.

Когда я изменяю «Content-Type» в text/html, представления работают, но apis, который возвращает и принимает json, не работает.

Куда я иду не так?

+0

-> header ('Content-Type', 'application/json') ;. Это ваша ошибка. Эта строка говорит вашему браузеру отображать содержимое как фактическое содержимое JSON, а не HTML. Удалите эту строку, и это нормально – ChainList

+0

Но, мне также нужно приложение/json для apis. – nirvair

+0

Вам нужно сделать еще одно промежуточное ПО и использовать его в группе, обертывающей все маршруты вашего API; – ChainList

ответ

1

Ваша проблема заключается в том, что вы сообщаете баузеру, что вы отправляете json, но на самом деле отправляете его HTML.

Вы можете обойти это, используя следующее.

public function handle($request, Closure $next) 
{ 
    $return = $next($request) 
     ->header('Access-Control-Allow-Credentials', 'true') 
     ->header('Access-Control-Allow-Methods', 'POST, GET, OPTIONS, PUT, DELETE') 
     ->header('Access-Control-Allow-Headers', 'Content-Type, Accept, Authorization, X-Requested-With'); 

    if ($request->wantsJson()) 
    { 
     $return->header('Content-Type', 'application/json'); 
    } 

    return $return; 
} 

С помощью функции $request->wantsJson() вы в состоянии сказать, если текущий запрос с просьбой получить JSON или нет, он делает это путем проверки заголовка обслуживаемого типа содержимого. См.: https://github.com/laravel/framework/blob/5.0/src/Illuminate/Http/Request.php#L581