Laravel中的异常不渲染视图

时间:2013-01-04 04:30:29

标签: laravel

问题摘要

我无法让Laravel使用Response :: error('500')渲染500默认错误页面(views / error / 500.php)。

重现代码(本例简化)

创建一个虚拟控制器并添加以下公共方法:

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        Response::error('500');
    }
}

当您运行此路线时,请注意您将收到一个空白页面,标题状态为200,而不是500.

预期结果

我希望渲染views / error / 500.php中的默认500错误页面,并停止执行其余脚本(假设更长的脚本)。

实际结果

将标题状态为200的空白页面发送到浏览器。

我的环境

  • Laravel 3.2.12
  • 共享主机上的PHP 5.3.13
  • Windows 7
  • Chrome 23(在其他各种浏览器上的结果相同)

更多信息

我还能提供什么其他方法来使这个问题更容易理解或排除故障。 Laravel论坛(http://forums.laravel.io/viewtopic.php?id=2191)上出现了类似的(完全相同的)问题,并且在一段时间后它被证明是固定的。

在application / routes.php中,我有500个错误处理程序的以下代码:

Event::listen('500', function()
{
    return Response::error('500');
});

您可以在https://github.com/laravel/laravel/blob/master/laravel/response.php的GitHub上看到Response对象的源代码。

2 个答案:

答案 0 :(得分:6)

你错过了“回归”。你必须总是“回归”。

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        return Response::error('500');
    }
}

答案 1 :(得分:2)

你也可以返回这个事件,这会给你同样的东西,但允许你通过更改注册的事件来改变一行中的行为。

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        return Event::first('500');
    }
}