1. 场景一:只有一个密码框,并且是可选项,留空不修改密码,不留空则修改密码


编辑用户表单

<form action="" method="post">
用户名 <input type="text" name="username" value="liang" readonly autocomplete="off"><br>
手机号 <input type="text" name="mobile" value="10086" autocomplete="off"><br>
新密码 <input type="password" name="password" placeholder="可选项,留空则不修改密码"><br>
<button>确认修改</button>
</form>

验证器类

<?php
namespace app\validate; use think\Validate; class User extends Validate
{
/**
* 定义验证规则
*/
protected $rule = [
'username' => 'require|unique:user',
'password' => 'require|length:4,16|confirm',
'mobile' => 'require',
]; /**
* edit 验证场景 编辑用户信息
*/
public function sceneEdit()
{
return $this
->remove('username', 'unique')
->remove('password', 'require|confirm');
}
}

使用验证器验证数据

public function edit()
{
if ($this->request->isPost()) {
$data = input('post.');
try {
validate('app\validate\User')
->scene('edit')
->batch(true)
->check($data);
} catch (\think\exception\ValidateException $e) {
halt('验证失败', $e->getError());
}
echo '通过验证';
} else {
return view();
}
}

2. 场景二:两个密码框,修改密码时有新密码、确认密码,新密码框不为空时,确认密码才验证


编辑用户表单

<form action="" method="post">
用户名 <input type="text" name="username" value="liang" readonly autocomplete="off"><br><br>
手机号 <input type="text" name="mobile" value="10086" autocomplete="off"><br><br>
新密码 <input type="password" name="password" placeholder="可选项,留空则不修改密码"><br><br>
确认密码 <input type="password" name="newpassword" placeholder="必须和新密码文本框保持一致"><br><br>
<button>确认修改</button>
</form>

验证器类

<?php
namespace app\validate; use think\Validate; class User extends Validate
{
/**
* 定义验证规则
*/
protected $rule = [
'username' => 'require|unique:user',
'password' => 'require|length:4,16|confirm',
'mobile' => 'require',
]; /**
* 定义错误信息
*/
protected $message = [
'newpassword.requireWith' => '确认密码不能为空',
'newpassword.confirm' => '两个新密码不一致',
]; /**
* edit 验证场景 编辑用户信息
*/
public function sceneEdit()
{
return $this
->remove('username', 'unique')
->remove('password', 'require|confirm')
->append('newpassword', 'requireWith:password|confirm:password');
}
}

使用验证器验证数据

public function edit()
{
if ($this->request->isPost()) {
$data = input('post.');
try {
validate('app\validate\User')
->scene('edit')
->batch(true)
->check($data);
} catch (\think\exception\ValidateException $e) {
halt('验证失败', $e->getError());
}
echo '通过验证';
} else {
return view();
}
}

TP6.0中的密码验证逻辑、验证器的使用的更多相关文章

  1. 在ASP.NET Core 2.0中使用Facebook进行身份验证

    已经很久没有更新自己的技术博客了,自从上个月末来到天津之后把家安顿好,这个月月初开始找工作,由于以前是做.NET开发的,所以找的还是.NET工作,但是天津这边大多还是针对to B(企业)进行定制开发的 ...

  2. C#2.0中使用yield关键字简化枚举器的实现

    我们知道要使用foreach语句从客户端代码中调用迭代器,必需实现IEnumerable接口来公开枚举器,IEnumerable是用来公开枚举器的,它并不实现枚举器,要实现枚举器必需实现IEnumer ...

  3. Lucene 4.4.0中常用的几个分词器

    一.WhitespaceAnalyzer 以空格作为切词标准,不对语汇单元进行其他规范化处理.很明显这个实用英文,单词之间用空格. 二.SimpleAnalyzer 以非字母符来分割文本信息,并将语汇 ...

  4. FineUI(开源版)v6.0中FState服务器端验证的实现原理

    前言 1. FineUI(开源版)是完整开源,最早发起于 2008-04,下载全部源代码:http://fineui.codeplex.com/ 2. 你可以通过捐赠作者来支持FineUI(开源版)的 ...

  5. 在 vSphere 5.x/6.0 中配置 Network Dump Collector 服务 (2002954)

    vmware KB: https://kb.vmware.com/s/article/2002954?lang=zh_CN 重点配置命令: 使用 vSphere Client 连接到 vCenter ...

  6. C# 9.0中引入的新特性init和record的使用思考

    写在前面 .NET 5.0已经发布,C# 9.0也为我们带来了许多新特性,其中最让我印象深刻的就是init和record type,很多文章已经把这两个新特性讨论的差不多了,本文不再详细讨论,而是通过 ...

  7. Android高效率编码-第三方SDK详解系列(二)——Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能

    Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 我的本意是第二篇写Mob的shareSD ...

  8. struts2(三)---struts2中的服务端数据验证框架validate

    struts2为我们提供了一个很好的数据验证框架–validate,该框架可以很方便的实现服务端的数据验证. ActionSupport类提供了一个validate()方法,当我们需要在某一个acti ...

  9. EXTJS 密码确认与验证

    extjs 框架是一个非常优秀的前端框架,提供了丰富的功能与炫丽的界面展示,在用 extjs 创建表单时,特别是在注册或修改密码的时候,要对密码进行确认,这里就密码确认一致性验证和大家分享自己的心得与 ...

随机推荐

  1. 构造函数原型constructor

    对象原型(__proto__)和构造函数原型对象(prototype)里面都有一个属性constructor,constructor我们称为构造函数,因为它指向的是构造函数本身. constructo ...

  2. C#LeetCode刷题-分治算法

    分治算法篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...

  3. C#LeetCode刷题之#415-字符串相加(Add Strings)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3873 访问. 给定两个字符串形式的非负整数 num1 和num2 ...

  4. C#LeetCode刷题之#141-环形链表(Linked List Cycle)

    问题 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/3901 访问. 给定一个链表,判断链表中是否有环. 进阶: 你能否 ...

  5. Qt开发技术:QCharts(三)QCharts样条曲线图介绍、Demo以及代码详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  6. CardView之可切换式卡片

    今天我所要作的笔记是: 可切换式的卡片CardView. Java代码部分 1.我们要根据自己的当前版本号添加相对应的一个依赖: implementation 'com.android.support ...

  7. unity探索者之socket传输protobuf字节流(四)

    版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7027659.html 上篇已经把socket的传输说的差不多了,这篇主要是说说断线 ...

  8. SpringMVC接受表单数据

    @ 目录 pojo addProduct.jsp ProductController showProduct.jsp 测试结果 pojo 新建实体类Product package pojo; publ ...

  9. 用Python的Pandas和Matplotlib绘制股票唐奇安通道,布林带通道和鳄鱼组线

    我最近出了一本书,<基于股票大数据分析的Python入门实战 视频教学版>,京东链接:https://item.jd.com/69241653952.html,在其中给出了MACD,KDJ ...

  10. 第3章 Hive数据类型

    第3章 Hive数据类型 3.1 基本数据类型 对于Hive的String类型相当于数据库的varchar类型,该类型是一个可变的字符串,不过它不能声明其中最多能存储多少个字符,理论上它可以存储2GB ...