Laravel思维导图之HTTP请求、响应、表单验证

今天我来分享 Laravel 中 HTTP 层关于请求、响应与表单验证的知识。

0x00 HTTP 请求

获取请求

在控制器方法中使用 Illuminate\Http\Request 类型提示,
可以以依赖注入方式来获取当前 HTTP 请求的实例。

将路由参数置于其他依赖之后可以传入路由参数。

Request 提供了内置方法来便捷地做请求相关处理。

  • path 方法返回请求路径信息。

  • is 方法验证收到的请求路径与指定规则是否匹配。

  • url 返回不带有查询字符串的 URL。

  • fullUrl 返回包含查询字符串的完整 URL。

  • method 方法返回 HTTP 请求方式。

  • isMethod 方法验证 HTTP 请求方式与指定规则是否匹配。

输入数据的预处理与规范化

在 Laravel 的全局中间件中默认包含了 TrimStringsConvertEmptyStringsToNull 两个中间件。这些中间件被列在 App\Http\Kernel 类中。它们会自动处理所有请求中传入的字符串字段,比如将空的字符串字段转变成 null 值。想停用这些功能,则需要在 App\Http\Kernel 类的 $middleware 属性中移除这些中间件。

获取输入数据

Laravel 支持从 Request 中获取常规数据、旧输入数据、cookies。

获取常规数据的方法有:

  • 使用 all 方法以 数组 形式获取到所有输入数据。

  • input 方法获取指定输入值。

  • 通过动态属性获取输入数据。

  • 通过 json 方法获取 JSON 输入信息。

  • 通过 only/except 方法获取部分输入数据。

  • 通过 has 方法确定是否有输入值。

对于旧数据,Laravel 允许你将本次的输入数据保留到下一次请求发送前。
这个特性在表单验证错误后重新填写表单相当有用。

文件资源

获取上传文件的相关方法:

  • file 方法获取上传的文件。

  • hasFile 方法确认上传的文件是否存在。

  • isValid 方法验证上传的文件是否有效。

UploadedFile 这个类也包含了访问文件完整路径和扩展的方法。

  • path 方法获取路径。

  • extension 方法获取扩展名。

此外,store 方法支持上传文件储存到本地磁盘或者云存储上。

0x01 HTTP 响应

所有路由和控制器都会返回一个响应并返回给用户的浏览器。

创建响应

Laravel 支持的 HTTP 响应类型包括字符串、数组、对象、附件头信息、附加 Cookie 等。

重定向

重定向响应是 Illuminate\Http\RedirectResponse 类的实例,
并且包含用户需要重定向至另一个 URL 所需的头信息。

Laravel 支持:

  • 通过全局 redirect 辅助函数实现重定向。

  • 通过 back 辅助函数实现重定向至上级页面。

  • 重定向至命名路由,并根据需要携带普通或 Eloquent 模型参数。

  • 通过 action 方法传递控制器和行为名称作为参数来实现重定向至控制器行为。

  • 重定向至一个新的 URL 的同时通常会 附加 Session 闪存数据。

其他响应

使用全局辅助函数 response 可以轻松的生成其他类型的响应实例。

响应宏

自定义可以在很多路由和控制器重复使用的响应,可以使用 Response Facade 实现的 macro 方法。

0x02 表单验证机制详解

Laravel 提供了多种不同的验证方法来对应用程序传入的数据进行验证。默认情况下,Laravel 的基类控制器使用 ValidatesRequests Trait,它提供了方便的方法使用各种强大的验证规则来验证传入的 HTTP 请求数据。

快速上手实例

重点在于在控制器的方法中,添加验证逻辑。

表单请求验证

这部分与上面实例的差别在于为了满足更复杂的验证情境,我们需要创建一个表单请求。表单请求是一个自定义的请求类,里面包含着验证逻辑。想要运行验证规则,在控制器方法中利用类型提示传入请求。

在自定义的表单请求类中可以实现:

  • 通过 rules 方法添加验证规则。

  • 通过 withValidator 方法在表单请求以后添加钩子。

  • 通过 authorize 方法授权表单请求。

  • 重写 AppHttpRequestsRequest 中的
    formatErrors 方法来自定义错误格式。

  • 重写 messages 方法自定义错误消息。

手动创建验证请求

之前的内容是直接使用 ValidatesRequests Trait 的 validate 方法来实现表单验证。此外,还可以手动创建一个 validator 实例并通过 Validator::make 方法在 Facade 生成一个新的 validator 实例来实现表单验证。

处理错误消息

调用 Validator 实例的 errors 方法,会得到一个 Illuminate\Support\MessageBag 的实例,可以对 MessageBag 进行各种处理,以满足具体的需求。

常用的错误信息相关方法:

  • 通过 first 方法查看特定字段的第一个错误消息。

  • 通过 get 方法查看特定字段的所有错误消息。

  • 通过 all 方法查看所有字段的所有错误消息。

  • 通过 has 方法判断特定字段是否含有错误消息。

自定义错误消息则主要通过传递三个参数到 Validator::make 方法来实现。

内置可用的验证规则

Laravel 内置了大量可用的验证规则。如下图:

具体用法可以查看文档:http://d.laravel-china.org/docs/5.4/validation#available-validation-rules

按条件添加规则

Laravel 还可以实现灵活的根据条件添加规则,如当字段存在时才进行验证,以及更多复杂的自定义验证规则。

验证数组

对于请求中的数组参数,可以使用型号 * 字符获取所有数组中的项。

自定义规则

除了 Laravel 内置的验证规则外,还可以根据需要自定义规则。在 服务提供者 中使用 Validator Facade 中的 extend 方法来注册自定义的验证规则。

0x03 下一步

到这篇为止,我完成了 Laravel 入门指南、核心概念、HTTP 层的路由、中间件、控制器、请求、响应、表单验证的学习和整理。这几个部分已经可以让你实现简单的面向前端的接口。

接下来我将对数据库及 ORM 部分进行学习和整理。绝大多数应用的数据都存储在数据库中,服务端的功能围绕着数据库中存储的数据展开,从而构建了强大的应用。

0x04 写在最后

对于知识的学习,整理是非常关键的一环,有助于加深理解。

对于 Laravel 的学习我将持续地以思维导图的方式整理输出,并首发在微信公众号 up2048 上分享给需要的读者。

由于思维导图在导出成图片的过程中会变得模糊,为了方便读者,我也提供了思维导图源文件的下载。读者可根据需要,关注微信公众号:up2048,并回复“脑图”来免费获取

- EOF -

推荐阅读

  • 记一次 Laravel 应用性能调优经历

  • 你开发的小程序慢到令人发指可能仅仅因为它

  • 我心目中的网络接口设计到底是怎样的过程?

  • 多平台统一用户系统设计

  • 十五张思维导图带你快速学习PHP言语基础

你可能感兴趣的:(http,请求,php-laravel,laravel,php)