使用Laravel 5.2。
导航到路线时出现以下错误。
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
。
答案 0 :(得分:1)
不知何故,框架没有将返回的字符串转换为响应对象。 Illuminate \ Session \ Middleware \ StartSession类中的addCookieToResponse方法希望将Response对象作为第一个参数。确保在所有路线中都返回一个。
这是一个可能的快速修复方法,根据您的情况进行更改。
在:
Route::get('hi', function() {
return 'hi';
});
后:
Route::get('hi', function() {
return response('hi');
});