我已创建自己的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::make
使用呈现为Response内容的html视图构建它,然后返回它:
$response = Response::make($view, $code);
return $response;
工作流程遵循线程非常好并且404 html视图根据布局正确显示,404状态设置也很好。但是,这里的问题是什么?好吧...出于某种原因,html输出中有一个“echo”,如下所示:
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
类来设置状态代码。我怎么处理这个?
答案 0 :(得分:2)
我也遇到了这个问题并解决了。我希望这会对你有所帮助。
$view = App::make('PublicController')->callAction('error', array($code));
return Response::make($view->__toString(), $code);