duanmuybrtg1231
duanmuybrtg1231
2014-04-08 19:08

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

已采纳

I have create my own 404 error handler editing laravel 4's /app/start/global.php file as below:

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. Because of the use a template library, I must delagate the view style across a specific controller. So, I get a nice style with this line:

    $view = App::make('PublicController')->callAction('error', array($code));
    
  2. Because of the application needs a status code for browser request, I build it with Response::make using the html view rendered as Response's content and then, return it:

    $response = Response::make($view, $code);
    return $response;
    

The workflow follows the thread really good and the 404 html view is showed correctly according to the layout, the 404 status is set also good. But, what's the problem here? well.. for some reason, there is an "echo" at html output, like below:

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"> 

    ...

If you note, there is a message at the beginning:

HTTP/1.0 200 OK Cache-Control: no-cache Date: Tue, 08 Apr 2014 18:21:44 GMT

Looks like Response::make function has an echo within, because if I do:

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

... the message disapears, but I do not like this answer because I need to use Response class in order to set the status code. How can I dealing with this?

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • doujing2017 doujing2017 7年前

    I also encountered this problem and resolved. I hope this will help you.

    $view = App::make('PublicController')->callAction('error', array($code));
    return Response::make($view->__toString(), $code);
    
    点赞 评论 复制链接分享

相关推荐