我对Laravel很新,在过去的应用程序中我会生成用户警告或通知,使用自定义错误处理程序,它会发送电子邮件。
错误通常是用户输入无法验证的无效数据或第三方API调用未返回任何结果的情况。
我的麻烦是Laravel停止执行并显示任何错误的whoops页面,因此生成错误可能不是我应该处理的方式,但是最好的(正确的?)方式是什么?
答案 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。