Laravel 中的验证是什么?一位初级工程师从完全新手的角度进行解释。

介绍
您好!我叫Mirai,是一名新入职的工程师,2026年加入公司,拥有文科背景,没有任何工作经验。完成三个月的培训项目后,我从七月开始在系统开发部门工作。
培训期间给我留下深刻印象的一点是验证系统。
起初,根据名称的发音,我以为它像屏障一样,是用来阻挡东西的。但实际上,这个词并非源自“屏障”(barrier),而是 源自“验证” ),它的作用是“验证传入的值是否正确”。
本文以一个完全初学者的视角 撰写
我希望这能对那些立志成为工程师的人,或者在培训过程中感到迷茫的人有所帮助!
使用的编程语言/框架:PHP 8.3 / Laravel 11
参考:https
验证究竟是什么?
验证是指检查输入的值是否正确的过程 。
日语中,这叫做“验证”或“输入检查”。
你在日常生活中是否经历过类似的事情?

- 注册成为会员时,我将电子邮件地址字段留空并提交了,但系统显示“这是必填字段”,我无法继续。
- 如果在电话号码栏中输入的姓名有误,则会显示“请使用数字输入”的消息。
那种“阻止你前进并让你停滞不前的机制”恰恰就是验证!
“何必费劲去查呢?”
① 防止将不适当的数据插入数据库。
标题为空的数据,或 URL 字段中包含“aaaa”的数据。即使只有一个这样的条目,也可能导致列表视图崩溃或链接无法点击。在入口点阻止它们,可以避免以后修复的麻烦。
② 安全原因
表单是“任何人都可以自由提交文本的入口点”。恶意用户有可能提交不当数据。验证机制就像守门人一样,把守着这个入口点。
③ 您可以放心地编写后续处理步骤。
由于验证后的数据是“经过检查且干净的数据”,因此在后续处理中……”或“如果输入了完全不同的内容怎么办……” 代码变得更简洁,可读性也更高!
你怎么写?
以下是我尝试创建自己的工具时实际编写的代码。
public function store(Request $request) { // 验证输入并将一个链接保存到当前登录用户的链接列表中 Auth::user()->links()->create($request->validate([ 'title' => 'required', 'url' => 'required|url', 'memo' => 'nullable', ])); // 重定向到链接列表 return redirect()->route('links.index');] }
虽然只有寥寥几行,但在这段文字中……
- 输入验证
- 保持
- 屏幕过渡
这三件事都在进行中。
我将按顺序解释!
上面的代码与下面的代码含义完全相同,只是写法不同 。
public function store(Request $request) { // 首先,进行验证。将验证后的数据放入变量 $targetData = $request->validate([ 'title' => 'required', 'url' => 'required|url', 'memo' => 'nullable', ]); // 将一个链接保存到当前登录用户的 Auth::user()->links()->create($targetData); // 重定向到链接列表 return redirect()->route('links.index'); }
对于初学者,我建议先从这个“分章节版本”入手,这样更容易理解 。我也尝试过分段阅读,逐渐地就能读懂了。
变量名 $validated 的 意思是“已验证”,是 Laravel 官方文档和实际代码中常用的名称。
逐行破译代码
如果还有人不太明白,我们一行一行地来分析一下!
$request->validate([...])
我们将对表单提交的数据进行验证。验证规则如下:
| 物品 | 规则 | 意义 |
|---|---|---|
标题 |
必需的 |
此项必须填写。 |
URL |
必填 | URL |
此项为必填项,且必须采用URL格式。 |
备忘录 |
可空 |
即使是空的也没关系。 |
您可以使用竖线符号(| ) 分隔多个规则,同时指定多个规则。`required |url`表示“URL 格式的必填项”。
如果违反此规则,Laravel 将自动返回到输入屏幕!
Auth::user()->links()->create()
如果将其分解成三个部分,就更容易理解了。
Auth::user()... 当前登录用户->links()… 该用户拥有的链接集合->create()… 在此处创建一个新的数据条目。
合起来读,意思是“在当前登录用户的链接集合中创建一个新链接”。
当我意识到这就像阅读英文文本一样时,以前看起来像代码的东西突然变得容易理解多了。
return redirect()->route('links.index')
保存完成后,您将被重定向到列表屏幕( links.index )。
为什么验证操作会先进行?
这部分起初最让我困惑。
Auth::user()->links()->create($request->validate([...]));
如果从左到右 `create()` 函数 排在最前面阅读这段代码,你会看到。但实际上,它的执行顺序是“先验证,后保存”。
这是为什么?
答:因为括号内的内容必须完成之后,才能执行括号外的部分。
试着回忆一下你在小学学过的数学知识。
2 × (3 + 4) = 14
在这种情况下,首先计算的 (3 + 4) 我们是 。我们计算括号内的部分得到7 ,然后执行2 × 。
编程也是如此。
create( $request->validate([...]) ) └── 括号内的内容 ──┘
要执行`create()` 函数,必须先确定要传递的内容。这就是为什么括号内的`validate()`函数会先运行,只有在输出结果后,才会使用该结果运行`create()`函数。
常用验证规则
除了这次我们使用的三条规则之外,我还将介绍一些其他常用的规则。
| 规则 | 意义 | 何时使用 |
|---|---|---|
必需的 |
必填字段 | 姓名、职称等 |
可空 |
即使是空的也没关系。 | 备注、评论等 |
URL |
URL格式 | URL |
电子邮件 |
电子邮件地址格式 | 会员注册等。 |
整数 |
成为整数 | 数量,年龄 |
最大值:255 |
最多 255 个字符 | 文本,笔记 |
最小值:8 |
8 个字符或更多 | 密码 |
例如,如果您想将标题的字符限制设置为 255 个字符,您可以这样写。
'title' => 'required|max:255',
概括
最后,让我们回顾一下本文的要点。
- 验证是一种检查输入值是否正确的机制。它可以保持数据干净,保护数据安全,并简化后续处理。
`$request->validate()`函数在验证失败时会自动返回到输入屏幕,并在验证成功时返回一个已检查的数组。- 代码的执行顺序是“括号内的代码先执行”。这与算术运算的规则相同。
我想对那些立志成为工程师的你们说几句话。
当我第一次看到这段代码时,它看起来真的就像是一段秘密代码。
但实际上,你可以用你在学校学到的方式去思考,比如算术中括号的顺序或英语中的词序。
对于所有新毕业的工程师以及有志成为工程师的人,我希望这篇文章能对像我一样从零开始的人有所帮助!
感谢您阅读至此!
