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. JavaFX桌面应用开发-HelloWorld

    JavaFX是一个强大的图形和多媒体处理工具包集合,它允许开发者来设计.创建.测试.调试和部署富客户端程序,并且和Java一样跨平台. JavaFX比Swing好用很多,它允许开发使用FXML来设计和 ...

  2. 【LifecycleException】: org.apache.catalina.LifecycleException: A child container failed during start 解决

    看了好多种解决方案: 第一种:从tomcat remove project -> clean project -> reboot project; 第二种:说用到的 jasper jsp解 ...

  3. C#设计模式之18-备忘录模式

    备忘录模式(Memento Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/421 访问. 备忘录模式属 ...

  4. C#设计模式之2-抽象工厂模式

    抽象工厂模式(Abstract Factory Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/391 ...

  5. golang实现 快速排序算法

    快速排序算法原理: b站https://b23.tv/uJqRYN package main import "fmt" //[]int{1,2,3,4,5,6,7,8} func ...

  6. 关于Dapper实现读写分离的个人思考

    概念相关     为了确保多线上环境数据库的稳定性和可用性,大部分情况下都使用了双机热备的技术.一般是一个主库+一个从库或者多个从库的结构,从库的数据来自于主库的同步.在此基础上我们可以通过数据库反向 ...

  7. 【Spring注解驱动开发】你还不会使用@Resource和@Inject注解?那你就out了!!

    写在前面 我在 冰河技术 微信公众号中发表的<[Spring注解驱动开发]使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?>一文中,介绍了如何使 ...

  8. 非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3

    非确定性有穷状态决策自动机练习题Vol.3 D. Dp搬运工3 题目描述 给定两个长度为 \(n\) 的排列,定义 \(magic(A,B)=∑_{i=1}^nmax(Ai,Bi)\) . 现在给定 ...

  9. linux驱动之模块化驱动Makefile

    本文摘自http://blog.csdn.net/lufeiop02/article/details/6446343 Linux驱动一般以模块module的形式来加载,首先需要把驱动编译成模块的形式. ...

  10. Could not create an acl object: Role '16'

    解决方案: (1) 用rm命令一个一个的清除var/cache, var/page_cache, var/di, generated/文件夹下的所有文件 (2) run setup:upgradeco ...