Laravel Validation 表单验证(一、快速验证)
Laravel 提供了几种不同的方法来验证传入应用程序的数据。默认情况下,Laravel 的控制器基类使用 ValidatesRequests trait,它提供了一种方便的方法去使用各种强大的验证规则来验证传入的 HTTP 请求。
先看段简单的验证逻辑
$validatedData = $request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', ]);
使用 Illuminate\Http\Request
对象提供的 validate
方法 。如果验证通过,代码就可以正常的运行。如果验证失败,则会抛出异常,并自动将对应的错误响应返回给用户。
或者,验证规则可以指定为一个数组而不是单个 |
分隔字符串:
$validatedData = $request->validate([ 'title' => ['required', 'unique:posts', 'max:255'], 'body' => ['required'], ]);
首次验证失败后停止运行
如果你希望在某个属性第一次验证失败后停止运行验证规则,你需要附加 bail
规则到该属性:
$request->validate([ 'title' => 'bail|required|unique:posts|max:255', 'body' => 'required', ]);
在这个例子中,如果 title
字段没有通过 unique
规则,那么程序就不会继续检查 max
规则。规则会按照分配的顺序来验证。
关于数组数据的注意实现
如果你的 HTTP 请求包含一个 「嵌套」 参数(即数组),那你可以在验证规则中通过 「点」 语法来指定这些参数:
$request->validate([ 'title' => 'required|unique:posts|max:255', 'author.name' => 'required', 'author.description' => 'required', ]);
显示验证错误信息
如果传入的请求参数未通过给定的验证规则呢?正如前面所提到的,Laravel 会自动把用户重定向到之前的位置。另外,所有的验证错误信息会被自动 存储到 session。
重申一次,我们不必在 GET 路由中将错误消息显式绑定到视图。因为 Lavarel 会检查在 Session 数据中的错误信息,并自动将其绑定到视图(如果这个视图文件存在)。而其中的变量 $errors 是 Illuminate\Support\MessageBag 的一个实例。
注意:error 变量 , 可以使一直假定 $errors 变量存在并且可以安全地使用。
关于可选字段的注意事项
默认情况下,在 Laravel 应用的全局中间件堆栈 App\Http\Kernel 类中包含了 TrimStrings 和 ConvertEmptyStringsToNull 中间件。因此,如果你不希望验证程序将 null 值视为无效的话,那就需要将「可选」的请求字段标记为 nullable,举个例子:
$request->validate([ 'title' => 'required|unique:posts|max:255', 'body' => 'required', 'publish_at' => 'nullable|date', ]);
指定 publish_at
字段可以为 null
或者一个有效的日期格式。如果 nullable
的修饰词没有被添加到规则定义中,验证器会认为 null
是一个无效的日期格式。
AJAX 请求 & 验证
在这个例子中,我们使用传统的表单将数据发送到应用程序。但实际情况中,很多程序都会使用 AJAX 来发送请求。当我们对 AJAX 的请求中使用 validate 方法时,Laravel 并不会生成一个重定向响应,而是会生成一个包含所有验证错误信息的 JSON 响应。这个 JSON 响应会包含一个 HTTP 状态码 422 被发送出去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2021-10-18 Java基础(2)Java三大版本/体系
2021-10-18 一天一个 Linux 命令(28):fsck 命令
2016-10-18 Linux哲学思想--基本法则