[英]Laravel handling of user generated errors
我对Laravel还是很陌生,在过去的应用程序中,我会生成用户警告或通知,并使用自定义错误处理程序,该程序将发送电子邮件。
错误通常发生在用户输入无法验证的无效数据或第三方API调用未返回结果的情况下。
我的麻烦是Laravel会暂停执行并显示任何错误的页面,因此生成错误可能不是我应该处理的方式,但是最好的方法(正确吗?)是什么?
对于开发环境,建议在app/config/app.php
文件中使用debug => true
以获取有用的错误消息。 要将其禁用以进行生产(推荐),只需将此值更改为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
最通用的错误处理程序, Laravel
意味着任何un-handaled
错误都将由该错误处理程序处理,这就是为什么在此错误处理程序的底部声明特定的错误处理程序,因为错误处理程序从底部向上冒泡,而这个错误处理程序parent
,最后(如果未注册任何自定义处理程序或未捕获错误),如果您未使用任何特定的处理程序处理错误并且未返回任何响应,则此处理程序将负责处理错误处理错误时。
例如; 要注册ModelNotFoundException
异常,您可以尝试以下操作:
App::error(function(Illuminate\Database\Eloquent\ModelNotFoundException $e)
{
return Response::make('Not Found', 404);
});
现在,由于您从处理程序中返回了响应,因此父错误处理程序将不会被触发,并且响应将被发送到浏览器。 如果未返回响应,则将触发最顶层的父处理程序,就像JavaScript
event
冒泡一样。
在Laravel
网站上了解有关错误和登录的Laravel
信息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.