Laravel5.1之表单验证
一.生成一个验证类
1.生成
artisan make:request TestRequest
2.生成的文件在项目Http下的Requests文件夹下
3.默认生成的文件如下
class TestRequest 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 [
//
];
}
}
二.添加自定义验证逻辑
*在代码中将说明
<?php namespace Test\Http\Requests; use Illuminate\Support\Facades\Response; class TestRequest extends Request
{
//验证规则,exists下面将会有说明
protected $rules = [
'mid' => ['required', 'integer', 'exists:articles, id, is_active, 1, is_end, 1'],
'page' => ['required', 'integer'],
'content' => ['required','min:5']
]; //验证错误信息指定,否则默认是英文
protected $messages = [
'mid.required' => '参数错误',
'mid.integer' => '参数错误',
'mid.exists' => '数据不存在,或未审核通过!',
'page.required' => '参数错误',
'page.integer' => '参数错误',
'content.required' => '内容必须填写',
'content.min' => '内容不能少于:min个字',
]; /**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
} /**
*验证权限失败时的相应
*/
public function forbiddenResponse()
{
if ($this->ajax()) {
return response()->json(['data' => null, 'info' => '没有权限', 'status' => 0]);
} else {
return abort(403);
}
} /**
* 验证参数失败时的响应,如果验证指定的规则未通过,response将被调用,因为errors是个数组,保存所有的验证出错信息,这儿我们取出第一条显示,比较符合我们的使用习惯
* @param array $errors
* @return \Illuminate\Http\JsonResponse
*/
public function response(array $errors)
{
if ($this->ajax()) {
$firstErrors = array_shift($errors);
$error = $firstErrors[0];
return response()->json(['data' => null, 'info' => $error, 'status' => 0]);
} else {
return abort(404);
}
} /**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return $this->rules;
} /**
* @return array
*/
public function messages()
{
return $this->messages;
}
}
验证规则的exits说明
基本:
exists:table,column
这将从数据库查询,来确定是否通过
exists:articles,id,is_active,1,is_end,1
最终形成的SQL语句将是
select count(*) as aggregate from `articles` where ` id` = mid的值 and `is_active` = 1 and `is_end` = 1
如果查到数据,验证将通过,否则验证失败;需要注意的是exists中的各个值之间不要加空格,否则会形成如` is_active`这样子,导致数据库列不存在;
控制器中只要依赖注入这个验证类就可以了;这将在请求到来后,自动验证;
如果你不用验证类,也可以在控制器中写验证规则;
三.自定义验证规则
如果现有的验证规则不能满足我们的需求,我们可以自定义一个规则.
1.新建文件夹Validate,建立一个文件TestValidate.php
use Illuminate\Validation\Validator; class TestValidator extends Validator
{
/**
* 注意该方法必须要以Validate开头,后面的是验证规则名称
* 验证评论是否发表过快
* @param $attribute
* @param $value
* @return bool
*/
public function ValidateQuick($attribute, $value)
{
$userId = Auth::id();
/**
* 验证blog评论
*/
if ($attribute === 'mid') {
$mid = $value;
$lastComment = app(PostRepository::class)->find($mid, $userId); if ($lastComment && $lastComment->time > time()-60*30) {
return false;
}
return true;
}
}
}
2.在AppServiceProvider的boot方法中注册该验证规则
public function boot()
{
/**
* 验证评论是否发布过快
*/
Validator::resolver(function($translator, $data, $rules, $messages) {
return new TestValidator($translator, $data, $rules, $messages);
});
}
3.使用
...........
'mid' => ['quick'],
..........
Laravel5.1之表单验证的更多相关文章
- laravel5.7 表单验证
laravel5.7 表单验证 一.创建表单请求 1.找到 larave5.7 文档 验证 中的创建表单请求,这里就要用到命令:php artisan make:request BrandReques ...
- laravel5表单验证
学习laravel框架有一段时间了,觉得它自带的表单验证特别好用,和大家分享分享 对于一些验证规则手册上都有,相信大家看了就会,我简单的说下怎么使用自定义正则验证: 验证手机号:'tel' => ...
- jQuery学习之路(8)- 表单验证插件-Validation
▓▓▓▓▓▓ 大致介绍 jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 ...
- 玩转spring boot——AOP与表单验证
AOP在大多数的情况下的应用场景是:日志和验证.至于AOP的理论知识我就不做赘述.而AOP的通知类型有好几种,今天的例子我只选一个有代表意义的“环绕通知”来演示. 一.AOP入门 修改“pom.xml ...
- form表单验证-Javascript
Form表单验证: js基础考试内容,form表单验证,正则表达式,blur事件,自动获取数组,以及css布局样式,动态清除等.完整代码如下: <!DOCTYPE html PUBLIC &qu ...
- ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证
系列目录 注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力 一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双向验证 单单的用js实现的前端 ...
- 实现跨浏览器html5表单验证
div:nth-of-type(odd){ float: left; clear: left; } .origin-effect > div:nth-of-type(even){ float: ...
- jQuery Validate 表单验证 — 用户注册简单应用
相信很多coder在表单验证这块都是自己写验证规则的,今天我们用jQuery Validate这款前端验证利器来写一个简单的应用. 可以先把我写的这个小demo运行试下,先睹为快.猛戳链接--> ...
- jquery validate表单验证插件-推荐
1 表单验证的准备工作 在开启长篇大论之前,首先将表单验证的效果展示给大家. 1.点击表单项,显示帮助提示 2.鼠标离开表单项时,开始校验元素 3.鼠标离开后的正确.错误提示及鼠标移入时的帮 ...
随机推荐
- 汕头市队赛 SRM10 T1模拟只会猜题意
模拟只会猜题意 SRM 10 描述 有一本n个单词的词典,求按下列方法能造出的不相同的词汇数目. 1.词典中的单词是一个词. 2.能分为两部分的,其中前一部分是一个词典词或者其非空前缀,后一部分是一 ...
- Vijos P1007 绕钉子的长绳子
绕钉子的长绳子 背景 平面上有N个圆柱形的大钉子,半径都为R,所有钉子组成一个凸多边形. 现在你要用一条绳子把这些钉子围起来,绳子直径忽略不计. 描述 求出绳子的长度 格式 输入格式 第1行两个数:整 ...
- DNS 资源记录解释
;SOA授权的开始;;SOA或授权的开始记录用来表示区域的启动;每个区域必须只有一个SOA记录;从名字服务器,在不能和主服务器通信的情况下,将提供12小时DNS服务, 在指定的时间后停止为那个区域提供 ...
- OpenGL入门学习(四)
http://blog.csdn.net/sun6255028/article/details/5090055 OpenGL支持两种颜色模式:一种是RGBA,一种是颜色索引模式.无论哪种颜色模式,计算 ...
- (八) stm8程序段定位,理解lkf文件
要修改.lkf 文件. ST 有个中文文档: 如何基于STM8S系列MCU进行项目开发 页29/34 当“Auto”选择框被勾选时,.lkf文件会自动生成在项目主目录下的 debug/ 和 relea ...
- MongoDB中$redact操作符的使用
介绍 redact <- redaction 修订/校验,意思是对文档内容进行过滤,选择一些过滤或保留的信息 . access level 存取等级 有三种: - $$DESCEND 返回当前等 ...
- Win32环境下代码注入与API钩子的实现(转)
本文详细的介绍了在Visual Studio(以下简称VS)下实现API钩子的编程方法,阅读本文需要基础:有操作系统的基本知识(进程管理,内存管理),会在VS下编写和调试Win32应用程序和动态链接库 ...
- Selenium2+python自动化16-alert\confirm\prompt【转载】
前言 不是所有的弹出框都叫alert,在使用alert方法前,先要识别出到底是不是alert.先认清楚alert长什么样子,下次碰到了,就可以用对应方法解决. alert\confirm\prompt ...
- POJ 3470 Walls(线段树+扫描线)
[题目链接] http://poj.org/problem?id=3470 [题目大意] 给出几面墙,均垂直于x轴或者y轴,给出一些鸟的位置(二维坐标点), 鸟只会垂直x轴或者y轴飞行,并且会撞上最近 ...
- POJ 2886 Who Gets the Most Candies? (线段树)
[题目链接] http://poj.org/problem?id=2886 [题目大意] 一些人站成一个圈,每个人手上都有一个数字, 指定从一个人开始淘汰,每次一个人淘汰时,将手心里写着的数字x展示 ...