2016-08-12 7 views
1

Использование Laravel 5.2.StartSession Middleware throwing ErrorException

При перемещении по маршруту появляется следующая ошибка.

Argument 1 passed to Illuminate\Session\Middleware\StartSession::addCookieToResponse() must be an instance of Symfony\Component\HttpFoundation\Response, null given, called in /Users/.../vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php on line 72 and defined

То, что я не понимаю, что если запрос сделан через POST, не ErrorException не отбрасывается и ожидаемый ответ получен.

Я изменил метод App\Exceptions\Handler::handler($request, Exception $e) на следующее:

public function render($request, Exception $e) { 

    // If request is being made via AJAX or wants a JSON response. 
    if ($request->ajax() || $request->wantsJson()) { 

     // Check to see if 'getStatusCode()' method exists, otherwise use 500. 
     $status_code = method_exists($e, 'getStatusCode') ? $e->getStatusCode() : 500; 

     // Send JSON response. 
     return json($e->getMessage(), $status_code); 

    } 

    return parent::render($request, $e); 

} 

Помощник json() определяется как:

function json($message, $status = 200, $data = null) { 

    $output = [ 
     'success' => is_between($status, [200, 299]), 
     'statusCode' => $status, 
     'timestamp' => time(), 
     'message' => $message, 
    ]; 

    if(!is_null($data)) 
     $output['data'] = $data; 

    return \Illuminate\Support\Facades\Response::json($output, $status); 

} 

и is_between();

function is_between($value, array $range) { 

    if($value > $range[1]) 
     return false; 

    if($value < $range[0]) 
     return false; 

    return true; 

} 

Я попытался возвращаясь App\Exceptions\Handler::handler($request, Exception $e) метод назад, чтобы увидеть, если какой-либо из этого может быть причиной вопрос, но я все еще получаю ту же проблему.

Я также пробовал переписывать маршруты, и контроллер с таким же конечным результатом работает, если делается по запросу POST, в противном случае бросается ErrorException.

ответ

1

Как-то фреймворк не преобразовывает возвращенную строку в объект-ответ. Метод addCookieToResponse в классе Illuminate \ Session \ Middleware \ StartSession хочет, чтобы объект Response был первым параметром. Убедитесь, что вы вернули его во всех своих маршрутах.

Вот возможное быстрое исправление, измените его, чтобы он соответствовал вашему корпусу.

До:

Route::get('hi', function() { 
    return 'hi'; 
}); 

После:

Route::get('hi', function() { 
    return response('hi'); 
}); 
+0

Спасибо за ответ, но я уже видел этот ответ рассеянную вокруг сети, это была одна из первых вещей, которые я пробовал, и это не работает. Как вы можете видеть в помощнике 'json()', он возвращает объект Response, независимо от того, использую ли я метод 'Response :: json ($ message, $ status)' или помощник 'response(), проблема одна и та же. –

Смежные вопросы