2016-08-12 64 views
1

使用Laravel 5.2。StartSession中间件抛出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

不知何故,框架不会将返回的字符串转换为响应对象。 Illuminate \ Session \ Middleware \ StartSession类中的addCookieToResponse方法需要一个Response对象作为第一个参数。确保你在所有路线中都返回一个。

这里有一个可能的快速修复,将其改为适合您的情况。

前:

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

后:

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

谢谢你的答案,但我已经看到了这种反应散落各地的网络,它的第一件事情我尝试之一,不起作用。正如你可以在'json()'帮助器中看到的那样,无论我使用Response :: json($ message,$ status)方法还是'response()'帮助器,它都返回一个Response对象,问题是相同。 –

相关问题