1

问题摘要

我无法让 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');
});

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

4

2 回答 2

6

你错过了“回报”。您必须始终“返回”。

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        return Response::error('500');
    }
}
于 2013-01-04T04:31:38.450 回答
2

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

public function action_index()
{
    try
    {
        throw new Exception;    
    }
    catch(Exception $e)
    {
        return Event::first('500');
    }
}
于 2013-01-04T04:36:35.370 回答