最佳实践系列(十一):深入探讨 PHP 错误异常处理机制及 Laravel 框架底层的相应实现

错误和异常是很强大的工具,能帮助我们预期意料之外的事,使用优雅的方式捕获问题。不过,错误和异常很相似,容易让人混淆,二者都表示出问题了,都会提供错误信息,而且都有错误类型。然而,错误出现的时间比异常早,错误会导致程序脚本停止执行,如果可能,错误会委托给全局错误处理程序处理,有些错误是无法恢复的。对于高版本 PHP 我们基本上只需要处理异常,不用管错误,但我们仍然必须做好防御准备,因为 P…

Laravel 中使用 Vue.js 实现基于 Ajax 的表单提交错误验证

本教程基于 Laravel 5.4 开始之前首先准备好开发环境,我们假设你已经安装好 Laravel,至于 Vue 的引入,请参考官方文档。 做好上述准备工作后就可以开始我们的开发了,本教程中我们将演示文章发布页面的表单验证。 首先在 routes/web.php 中新增两条路由规则: Route::get(‘post/create’, ‘PostController@create’);…

[ PHP 内核与扩展开发系列] 内存管理 —— 内存分配与释放

在 PHP 里,我们可以定义字符串变量,比如 <?php $str=”hello”;?>,$str 这个字符串变量可以被自由的修改与复制。这一切在 C 语言里看起来都是不可能的事情,我们用 char *p = “hello”; 来定义一个字符串,但它是常量,是不能被修改的,如果你用 p[1]=’c’; 来修改这个字符串会引发段错误,为了修改 C 语言里的字符串常量,我们往往需…

[ Laravel 5.4 文档 ] 综合话题 —— 错误&日志

1、简介 Laravel 默认已经为我们配置好了错误和异常处理,我们在 App\Exceptions\Handler 类中触发异常并将响应返回给用户。本教程我们将深入探讨这个类。 此外,Laravel 还集成了 Monolog日志库以便提供各种功能强大的日志处理器,默认情况下,Laravel 已经为我们配置了一些处理器,我们可以选择单个日志文件,也可以选择记录错误信息到系统日志。 2、配…

[ Laravel 5.4 文档 ] HTTP层 —— 验证

1、简介 Laravel 提供了多种方法来验证应用输入数据。默认情况下,Laravel 的控制器基类使用ValidatesRequests trait,该trait提供了便利的方法通过各种功能强大的验证规则来验证输入的 HTTP 请求。 2、快速入门 要掌握 Laravel 强大的验证特性,让我们先看一个完整的验证表单并返回错误信息给用户的例子。 定义路由 首先,我们假定在 routes…

[ Lumen 5.3 文档 ] 更多特性 —— 验证

1、简介 Lumen提供了多种方法来验证应用输入数据。默认情况下,Lumen的控制器基类使用ProvidesConvenienceMethods trait,该trait提供了便利的方法通过各种功能强大的验证规则来验证输入的HTTP请求。 大多数情况下,Lumen中的验证实现和Laravel一样,可以通过完整的Laravel验证文档了解更多实现细节,但是两者之间还是有一些区别: 2、与L…

[ Lumen 5.3 文档 ] 更多特性 —— 错误 & 日志

1、简介 开始一个新的Lumen项目的时候,错误和异常处理已经默认为你配置好了。此外,Lumen还集成了提供各种功能强大日志处理器的Monolog日志库。 2、配置 错误详情 配置文件.env中的APP_DEBUG配置选项控制浏览器显示的错误详情数量。 对本地开发而言,你应该设置环境变量APP_DEBUG值为true。在生产环境,该值应该被设置为false。 自定义Monolog配置 如…

[ Laravel 5.3 文档 ] 起步 —— 错误&日志

1、简介 Laravel默认已经为我们配置好了错误和异常处理,我们在App\Exceptions\Handler类中触发异常并将响应返回给用户。本教程我们将深入探讨这个类。 此外,Laravel还集成了Monolog日志库以便提供各种功能强大的日志处理器,默认情况下,Laravel已经为我们配置了一些处理器,我们可以选择单个日志文件,也可以选择记录错误信息到系统日志。 2、配置 错误详情…

《程序员修炼之道:从小工到专家》第四章:注重实效的偏执

你不可能写出完美的软件 不完美的系统、荒谬的时间标度、可笑的工具、还有不可能实现的需求——在这样一个世界上,让我们安全“驾驶”。 一、按合约设计 没有什么比常识和坦率更让人感到惊讶。 与计算机打交道很难。与人打交道更难。但作为一个族类,我们花费在弄清楚人们交往的问题上的时间更长。在过去几千年中我们得出的一些解决办法也可应用于编程,确保坦率的最佳方案之一就是合约。 合约既规定你的权利和义务…

Laravel & Lumen RESTFul API 扩展包:Dingo API(四) —— 错误和异常响应

在构建API的时候处理错误是一件痛苦的事儿,在Dingo API中,你不需要手动构建错误响应,只需要抛出一个继承自Symfony\Component\HttpKernel\Exception\HttpException的异常,API会自动为你处理这个响应。 下面是Dingo API内置的Symfony异常: 异常 状态码 Symfony\Component\HttpKernel\Exce…

123