Laravel处理用户生成的错误

时间:2014-06-02 00:43:03

标签: php laravel error-handling

我对Laravel很新,在过去的应用程序中我会生成用户警告或通知,使用自定义错误处理程序,它会发送电子邮件。

错误通常是用户输入无法验证的无效数据或第三方API调用未返回任何结果的情况。

我的麻烦是Laravel停止执行并显示任何错误的whoops页面,因此生成错误可能不是我应该处理的方式,但是最好的(正确的?)方式是什么?

1 个答案:

答案 0 :(得分:4)

对于开发环境,建议在debug => true文件中使用app/config/app.php,以便获得提供信息的错误消息。要将其禁用以进行生产(推荐),只需将此值更改为false,例如:

/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/

'debug' => false

要注册自定义错误处理程序,您可以在app/start/global.php文件中声明该处理程序,例如:

// For 404 not found error
App::missing(function($e){
    return Redirect::to('/');
});

这将捕获所有404 not found错误,但请注意默认情况下该文件中可用的另一个错误处理程序,它是:

App::error(function(Exception $exception, $code)
{
Log::error($exception->getMessage());
});

这是Laravel中最通用的错误处理程序,意味着任何un-handaled错误将由此处理,这就是为什么声明这个错误处理程序底部的特定错误处理程序,因为错误处理程序冒泡从底部到顶部,这一个是parent所以最后(如果任何自定义处理程序没有注册或没有捕获错误)这个处理程序将负责处理错误,如果你没有处理使用任何特定处理程序的错误,并且在处理错误时没有返回任何响应。

例如;要注册ModelNotFoundException例外,您可以尝试这样做:

App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $e)
{
    return Response::make('Not Found', 404);
});

现在,由于您从处理程序返回了响应,因此父错误处理程序不会被触发,并且响应将被发送到浏览器。如果您没有返回响应,那么最顶层的父处理程序将像event中的JavaScript一样被触发。


详细了解Laravel网站上的Errors & Logging

相关问题