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');] }

虽然只有寥寥几行,但在这段文字中……

  1. 输入验证
  2. 保持
  3. 屏幕过渡

这三件事都在进行中。

我将按顺序解释!

上面的代码与下面的代码含义完全相同,只是写法不同

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()` 函数在验证失败时会自动返回到输入屏幕,并在验证成功时返回一个已检查的数组。
  • 代码的执行顺序是“括号内的代码先执行”。这与算术运算的规则相同。

我想对那些立志成为工程师的你们说几句话。

当我第一次看到这段代码时,它看起来真的就像是一段秘密代码。

但实际上,你可以用你在学校学到的方式去思考,比如算术中括号的顺序或英语中的词序。

对于所有新毕业的工程师以及有志成为工程师的人,我希望这篇文章能对像我一样从零开始的人有所帮助!

感谢您阅读至此!

如果您觉得这篇文章对您有帮助,请点个“赞”!
3
3
10
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者