调用Response :: make显示状态代码

时间:2014-04-08 19:08:40

标签: php laravel laravel-4

我已创建自己的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::make使用呈现为Response内容的html视图构建它,然后返回它:

    $response = Response::make($view, $code);
    return $response;
    
  3. 工作流程遵循线程非常好并且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类来设置状态代码。我怎么处理这个?

1 个答案:

答案 0 :(得分:2)


我也遇到了这个问题并解决了。我希望这会对你有所帮助。

$view = App::make('PublicController')->callAction('error', array($code));
return Response::make($view->__toString(), $code);