我创建了自己的 404 错误处理程序来编辑 laravel 4 的/app/start/global.php
文件,如下所示:
App::error(function(Exception $exception, $code)
{
Log::error($exception);
if (Config::get('app.debug')) {
return;
}
switch ($code)
{
case 403:
case 404:
case 500:
$view = App::make('PublicController')->callAction('error', array($code));
$response = Response::make($view, $code);
return $response;
break;
default:
return Response::view('errors.default', array(), $code);
break;
}
});
由于使用了模板库,因此我必须跨特定控制器降低视图样式。所以,我用这行得到了一个很好的风格:
$view = App::make('PublicController')->callAction('error', array($code));
由于应用程序需要浏览器请求的状态代码,因此我使用呈现为 Response 内容的 html 视图
Response::make
构建它,然后返回它:$response = Response::make($view, $code); return $response;
工作流程遵循线程非常好,404 html视图根据布局正确显示,404状态设置也很好。但是,这里有什么问题?井。。出于某种原因,HTML 输出中有一个"回声",如下所示:
HTTP/1.0 200 OK
Cache-Control: no-cache
Date: Tue, 08 Apr 2014 18:21:44 GMT
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
...
如果您注意到,开头有一条消息:
HTTP/1.0 200 OK 缓存控制:无缓存 日期:4月8日,星期二 2014 18:21:44 GMT
看起来Response::make
函数内部有一个echo
,因为如果我这样做:
$view = App::make('PublicController')->callAction('error', array($code));
return $view;
。消息消失了,但我不喜欢这个答案,因为我需要使用Response
类来设置状态代码。我该如何处理这个问题?
我也遇到了这个问题并解决了。我希望这对你有帮助。
$view = App::make('PublicController')->callAction('error', array($code));
return Response::make($view->__toString(), $code);