当前位置: 首页 > 后端技术 > PHP

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

时间:2023-03-29 16:45:47 PHP

今天分享Laravel中HTTP层的请求、响应、表单验证知识。0x00HTTP请求Getrequest在controller方法中使用Illuminate\Http\Request类型提示,以依赖注入的方式获取当前HTTP请求的实例。路由参数可以在其他依赖项之后传入。Request提供了内置的方法来方便的做请求相关的处理。path方法返回请求路径信息。is方法验证接收到的请求路径是否匹配指定的规则。url返回没有查询字符串的URL。fullUrl返回包含查询字符串的完整URL。method方法返回HTTP请求方法。isMethod方法验证HTTP请求方法是否匹配指定的规则。输入数据的预处理和归一化在Laravel的全局中间件中默认包含两个中间件TrimStrings和ConvertEmptyStringsToNull。这些中间件列在App\Http\Kernel类中。它们自动处理请求中所有传入的字符串字段,例如将空字符串字段转换为空值。要禁用这些功能,您需要在App\Http\Kernel类的$middleware属性中删除这些中间件。获取输入数据Laravel支持从请求中获取常规数据、旧输入数据和cookie。获取常规数据的方法有:使用all方法获取数组形式的所有输入数据。输入法获取指定的输入值。通过动态属性获取输入数据。通过json方法获取JSON输入信息。通过only/except方法获取部分输入数据。通过has方法判断是否有输入值。对于旧数据,Laravel允许您保留当前输入数据,直到发送下一个请求。此功能对于在表单验证错误后重新填写表单很有用。文件资源获取上传文件的相关方法:file方法获取上传文件。hasFile方法检查上传的文件是否存在。isValid方法验证上传的文件是否有效。UploadedFile类还包含访问文件的完整路径和扩展名的方法。获取路径的路径方法。扩展方法获取扩展名称。此外,store方法支持上传文件并存储到本地磁盘或云存储。0x01HTTPResponse所有路由和控制器向用户的浏览器返回一个响应。创建响应Laravel支持HTTP响应类型,包括字符串、数组、对象、附件标头、附加cookie等。重定向重定向响应是Illuminate\Http\RedirectResponse类的实例,包含将用户重定向到另一个URL所必需的标头。Laravel支持:通过全局重定向助手进行重定向。使用后退辅助函数重定向到父页面。重定向到命名路由,根据需要采用普通或Eloquent模型参数。通过将控制器和动作名称作为参数通过动作方法传递,重定向到控制器动作。重定向到新URL通常会附加会话闪存数据。其他响应使用全局辅助函数response可以轻松生成其他类型的响应实例。响应宏可以自定义可以在许多路由和控制器中重复使用的响应。您可以使用ResponseFacade实现的宏方法。0x02表单校验机制详解Laravel提供了多种不同的校验方式来校验应用程序传入的数据。默认情况下,Laravel的基控制器类使用ValidatesRequestsTrait,它提供了方便的方法来使用各种强大的验证规则来验证传入的HTTP请求数据。快速入门示例的重点是在控制器的方法中添加验证逻辑。表单请求验证与上面的例子不同的是,为了满足更复杂的验证场景,我们需要创建一个表单请求。表单请求是包含验证逻辑的自定义请求类。要运行验证规则,请在控制器方法中对传入请求进行类型提示。可以在自定义表单请求类中实现:通过rules方法添加校验规则。通过withValidator方法在表单请求后添加钩子。通过authorize方法授权表单请求。重写AppHttpRequestsRequest中的formatErrors方法来自定义错误格式。覆盖messages方法以自定义错误消息。手动创建验证请求之前的内容是直接使用ValidatesRequestsTrait的validate方法实现表单验证。另外,也可以手动创建一个验证器实例,在Facade上使用Validator::make方法生成一个新的验证器实例,实现表单验证。处理错误消息调用Validator实例的errors方法得到一个Illuminate\Support\MessageBag实例,可以通过多种方式处理以满足特定需求。常用的错误信息相关方法:使用第一种方法查看特定字段的第一条错误信息。通过get方法查看特定字段的所有错误消息。使用all方法查看所有字段的所有错误消息。使用has方法确定特定字段是否包含错误消息。自定义错误信息主要是通过传递三个参数给Validator::make方法来实现的。内置可用的验证规则Laravel内置了大量可用的验证规则。如下图所示:具体用法可以参考文档:http://d.laravel-china.org/docs/5.4/validation#available-validation-rules通过条件添加规则Laravel也可以通过条件,比如当字段存在时才校验,以及更复杂的自定义校验规则。验证数组对于请求中的数组参数,您可以使用模型*字符来获取数组中的所有项目。自定义规则除了Laravel内置的验证规则,你还可以根据需要自定义规则。在服务提供者的ValidatorFacade中使用extend方法来注册自定义验证规则。0x03下一步到本文为止。完成了Laravel入门指南、核心概念、HTTP层路由、中间件、控制器、请求、响应、表单验证的学习和整理。这几个部分已经允许您实现一个简单的面向前端的接口。接下来,我将对数据库和ORM部分进行学习和整理。大多数应用程序的数据都存储在数据库中,服务器的功能围绕着数据库中存储的数据展开,从而构建功能强大的应用程序。0x04写在最后。对于知识的学习,整理是非常关键的一环,有助于加深理解。对于Laravel的学习,我会继续以思维导图的形式整理输出,在微信上分享给有需要的读者公众号up2048。由于思维导图在导出为图片的过程中会变得模糊,为了方便读者,我也提供了思维导图源文件的下载。读者可根据需要关注微信公众号:up2048,回复“脑图”即可免费获取。-EOF-推荐阅读记一个Laravel应用性能调优的心得你开发的小程序慢到可能就是因为它。我心目中的网络接口设计流程是怎样的?多平台统一用户系统设计十五张思维导图带你快速学习PHP语言基础知识