呼叫响应::使显示状态代码


Calling Response::make show the status code

我创建了自己的 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;
    }
});
  1. 由于使用了模板库,因此我必须跨特定控制器降低视图样式。所以,我用这行得到了一个很好的风格:

    $view = App::make('PublicController')->callAction('error', array($code));
    
  2. 由于应用程序需要浏览器请求的状态代码,因此我使用呈现为 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);