0

0

Laravel 5系列教程七:表单验证 Validation

php中文网

php中文网

发布时间:2016-06-20 12:49:00

|

1243人浏览过

|

来源于php中文网

原创

原文来自:https://laravist.com/article/15

laravist是我刚刚上线的laravel社区,有任何与laravel相关的问题可以到这里来问我,我会尽力去帮大家解决问题,后期会尝试录制一些视频教程,形式大概是这样的

https://laravist.com/lesson/1

终于要更新这个Laravel系列教程的第七篇了,期间去写了一点其他的东西。

就不说废话了吧,直接进入Form Validation的部分吧。几乎在每一个web应用当中都会有表单,而有表单基本就离不开表单验证。在laravel中,其实可以说是有两种方式来进行表单验证:使用Request和使用Validation。下面将分开讲这两部分的内容,而且我会更着重第一种,也更推荐大家使用第一种进行表单验证:

Request表单验证

为什么说是会把精力都放在讲解第一种验证方式呢?因为个人觉得第一种方式在相同的验证条件下,更加易于维护和可以进行代码重用。而且写代码的形式更适用于Laravel和我个人的使用习惯:可以使用命令行来生成代码。也就是可以使用artisan这个工具:

图酷AI
图酷AI

下载即用!可以免费使用的AI图像处理工具,致力于为用户提供最先进的AI图像处理技术,让图像编辑变得简单高效。

下载
php artisan make:request StoreArticleRequest

在项目目录下使用artisan的make:request命令就可以生成一个用于表单验证Request类了,这个类我们在这里命名为StoreArticleRequest,你也可以以你自己喜欢的方式来命名,但我还是推荐大家在命名的时候尽量使得名字比较人性化一点,这样会比较对于后期再看代码的时候有很多好处。这个命令生成的文件位于app/Http/Requests/这个文件夹当中,我们打开这个文件来看:

class StoreArticleRequest extends Request{    /**     * Determine if the user is authorized to make this request.     *     * @return bool     */    public function authorize()    {        return false;    }    /**     * Get the validation rules that apply to the request.     *     * @return array     */    public function rules()    {        return [            //        ];    }}

实现验证

可以看到里面会有两个方法:authorize()和 rules() 。authorize()可以这样简单地理解:我们在处理这个表单请求(通常是一个post请求)的时候是否是需要进行身份验证,这种验证是指:比如A发表的评论,B能不能进行编辑。如果不能,则保留返回false,如果可以,则修改返回true。那么我们这里的逻辑是:既然是发表文章,在我们这个站点注册的用户(如果开放注册的话)都是可以发表文章的,所以我们首先修改authorize()方法,将其返回值改为:return true;。

然后对于rules()方法,我们需要在这里设置我们的验证规则,比如我们可以设置下面这个的验证规则:

public function rules()    {        return [            'title' => 'required',            'content' => 'required'        ];    }

因为我们在创建文章的时候,我们会有两个提交过来的字段:title和content。这是我们在设计articles表的时候设置的两个字段。

然后,上面的验证规则是:对于title和content两个字段,我们需要用户为其填充内容,不能为空。

既然这里的规则设置好之后,我们该怎么应用起来呢?也就是我们怎么在将文章存入数据库之前进行验证呢?很简单,我们只需要稍微修改ArticleController的store()方法:

public function store(Requests\StoreArticleRequest $request)    {        $input = $request->all();        //下面增加两行,顺便看看Request::get的使用        $input['intro'] = mb_substr($request->get('content'),0,64);     }   

我们将整个StoreArticleRequest类的实例以$request变量传入store()方法,这个时候,laravel
就会自动检查我们是否需要进行表单验证(rules方法有没有定义验证规则),如果有需要验证的话,laravel会首先走验证这条路,如果验证没有通过,store()方法内的代码不会被执行,而是直接跳转到提交表单的页面,这里是:http://blog.dev/article/create 这个页面。如果所有的验证都通过之后,才会执行store()内部的代码,也就是才会执行到$input = $request->all();这里以及往下的代码。。。比如我们来试试留空的时候是什么样的情况:

反馈错误

上面的图片中好像没有什么变化,但其实是已经提交了一次了,但是又马上跳转回来了。我们可以使用下面的方式来验证一下:

@if($errors->any())        
    @foreach($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

在create.blade.php这个视图文件中增加上面的代码,我这里是放在{!! Form::close() !!}后面。这里的意思大概就是,如果有任何表单验证的错误消息,我们就讲这个信息打印出来反馈给用户。如果没有,则不会显示信息。我们再来试一下:

这时候可以看到,我们在表单验证没有通过的时候,在页面显示了相对应的错误信息。如果没有错误,就创建一篇文章。

tips:如果你不想错误信息为英文,可以到resources/lang/en/validation.php修改,或者你直接创建一个新的语言文件包。

多个验证规则

OK,这里,我们基本是将这个这个验证流程走通了。但是,在实际的开发中,我们的验证并不都是这个简单:要是我们要对一个字段设置多个验证规则呢?比如我们希望文章的title最少不能少于三个字节长度呢?我们可以这样,在rules()方法中:

'title' => 'required|min:3',

在laravel中,我们使用|将多个规则分开,:表示规则的值。其实这里你也可以使用数组的,但是我还是推荐大家像上面这样写,简洁明了。

其他常用验证规则

至于更多地验证规则,比如注册的时候,验证一个email和确认密码的时候,我们怎么需要怎么写的呢?

'email'=>'required|email','password'=>'required|min:6|confirmed','password_confirmation' => 'required|min:6'

上面我直接给出这两个常用场景的最常见的写法,email就代表验证所填的信息是否是一个正确地邮箱格式了,至于确认密码就使用confirmed来指定,这里注意是confirmed而不是confirme。而且第二次输入密码的字段需要写成password_confirmation这个形式,也就是在视图中,我们会有类似这样的input表单:

关于更多验证规则,参考官方文档:

http://laravel.com/docs/5.1/validation

使用Validation

使用这个之前可以将store(Requests\StoreArticleRequest $request)中的变量去掉

使用Validation的时候,多用于验证一些简单的表单验证。这里演示直接写于ArticleController当中,直接使用Validator::make(),使用方式为Validator::make(array $request,array $rules),比如说我们的例子可以在store()中写成:

$input = Request::all();$validator = Validator::make($input, [    'title' => 'required|min:3',    'body' => 'required',]);   

然后可以使用下面这样的方式来检查验证有没有通过:

 if ($validator->fails())  {            }

验证通过之后,我们才进行下一步操作,比如将数据存入数据库。一个基本的Validation流程就完成了,而且关于Validation的部分,我也只想介绍到这里,因为我会安利大家使用第一种方式:Request。

tips:这两种方式的背后都是使用一样的验证机制。

总结

这里就基本将基础的表单验证说完了,下一节我准说说queryScope和SetAttributes的使用,这两个对于我们的数据入库的预处理和代码重用都很有帮助,所以下次会先说这两个知识点:我们会先对published_at这个字段的设置和使用发挥出来,到时候你就知道设置这个字段的好处了。

最后:Happy Hacking

相关文章

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

19

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

27

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

15

2026.02.03

c语言中/相关合集
c语言中/相关合集

本专题整合了c语言中/的用法、含义解释。阅读专题下面的文章了解更多详细内容。

3

2026.02.03

漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题
漫蛙漫画网页版入口与正版在线阅读 漫蛙MANWA官网访问专题

本专题围绕漫蛙漫画(Manwa / Manwa2)官网网页版入口进行整理,涵盖漫蛙漫画官方主页访问方式、网页版在线阅读入口、台版正版漫画浏览说明及基础使用指引,帮助用户快速进入漫蛙漫画官网,稳定在线阅读正版漫画内容,避免误入非官方页面。

13

2026.02.03

Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口
Yandex官网入口与俄罗斯搜索引擎访问指南 Yandex中文登录与网页版入口

本专题汇总了俄罗斯知名搜索引擎 Yandex 的官网入口、免登录访问地址、中文登录方法与网页版使用指南,帮助用户稳定访问 Yandex 官网,并提供一站式入口汇总。无论是登录入口还是在线搜索,用户都能快速获取最新稳定的访问链接与使用指南。

114

2026.02.03

Java 设计模式与重构实践
Java 设计模式与重构实践

本专题专注讲解 Java 中常用的设计模式,包括单例模式、工厂模式、观察者模式、策略模式等,并结合代码重构实践,帮助学习者掌握 如何运用设计模式优化代码结构,提高代码的可读性、可维护性和扩展性。通过具体示例,展示设计模式如何解决实际开发中的复杂问题。

3

2026.02.03

C# 并发与异步编程
C# 并发与异步编程

本专题系统讲解 C# 异步编程与并发控制,重点介绍 async 和 await 关键字、Task 类、线程池管理、并发数据结构、死锁与线程安全问题。通过多个实战项目,帮助学习者掌握 如何在 C# 中编写高效的异步代码,提升应用的并发性能与响应速度。

2

2026.02.03

Python 强化学习与深度Q网络(DQN)
Python 强化学习与深度Q网络(DQN)

本专题深入讲解 Python 在强化学习(Reinforcement Learning)中的应用,重点介绍 深度Q网络(DQN) 及其实现方法,涵盖 Q-learning 算法、深度学习与神经网络的结合、环境模拟与奖励机制设计、探索与利用的平衡等。通过构建一个简单的游戏AI,帮助学习者掌握 如何使用 Python 训练智能体在动态环境中作出决策。

3

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号