阶段1:基础

application/controller/v1/Banner.php

<?php
namespace app\api\controller\v1;
use think\Controller;
use think\validate; class Banner extends controller{
public function index(){
//http://localhost/thinkphp5/public/index.php/api/v1.Banner/index }
public function getBanner(){ $data=array(
'name'=>'dash',
'email'=>'wolichihua2011@163.com' );
//独立验证
$validate=new Validate([ 'name'=>'require|max:10',
'email'=>'email'
]); //batch()批量验证 否则只返回最后一个getError验证信息
$result=$validate->batch()->check($data);//返回布尔
var_dump($result);
var_dump($validate->getError());//返回错误信息 } }

阶段二:讲=将验证规则单独放到其他的类文件中

<?php
namespace app\api\controller\v1;
use think\Controller;
use think\validate;
//use app\api\validate\TestValidate;
class Banner extends controller{
public function index(){
//http://localhost/thinkphp5/public/index.php/api/v1.Banner/index
}
public function getBanner($id){ $data=array(
'name'=>'dash',
'email'=>'wolichihua2011@163.com' ); //验证器 直接new
$validate= new \app\api\validate\TestValidate(); //或者引入命名空间在new use app\api\validate\TestValidate (application/api/validate/TestValidate.php)
   $validate= new TestValidate();//必须有这个命名空间 use app\api\validate\TestValidate
//batch()批量验证 否则只返回最后一个getError验证信息
$result=$validate->batch()->check($data);//返回布尔
var_dump($result);
var_dump($validate->getError());//返回错误信息 } }
application/api/validate/TestValidate.php
<?php
namespace app\api\validate;
use think\Validate;
class TestValidate extends Validate{
protected $rule =[
'name'=>'require|max:10',
'email'=>'email' ];
}

阶段三:封装验证参数:

application/controller/v1/Banner.php

<?php
namespace app\api\controller\v1;
use think\Controller;
use think\validate;
use app\api\validate\IDMustBePositiveInt;
class Banner extends controller{
public function index(){
http://localhost/thinkphp5/public/index.php/api/v1.Banner/index
}
public function getBanner($id){ (new IDMustBePositiveInt())->goCheck(); } }

application/api/validate/BaseValidate.php

<?php
namespace app\api\validate;
use think\Request;
use think\Validate;
use think\Exception;
class BaseValidate extends Validate{
public function goCheck(){
// 获取http参数
// 对这些参数做检验
$request= Request::instance();
$params=$request->param();
$result=$this->check($params);
if (!$result) {
$error=$this->error;
throw new Exception($error, 1); }else{
return true;
}
}
}

application/api/validate/IDMustBePositiveInt.php

<?php
namespace app\api\validate;
class IDMustBePositiveInt extends BaseValidate{
protected $rule=array( 'id'=>'require|isPositiveInteger'
); //自定义验证规则
protected function isPositiveInteger($value, $rule='', $data='', $field='')
{
if (is_numeric($value) && is_int($value + 0) && ($value + 0) > 0) {
return true;
}
return $field . '必须是正整数';
}
}

阶段4:讲自定义规则挪到BaseValidate.php中,其他自定义的也一样只保留rule规则就行了

阶段5:创建更多的自定义验证类

阶段六:自定义验证类文件多了,就需要工厂类来封装啦!

Tp-validate进阶的更多相关文章

  1. TP验证规则Validate

    use think\Validate; <?php namespace app\common\model; use think\Validate; use think\Db; class Inv ...

  2. 基于jQuery的Validate表单验证

    表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~  而我工作中用到最多的就是基于基于jQuery的Validate表单验证~  就向下面这样~ 因为今天有个朋 ...

  3. tp框架验证信息

    今天在这里我们学习一下tp框架里面怎么做验证. 验证又分为两种:静态验证.动态验证 首先,我们还是先做一个html界面,名为add.html.代码如下: <!DOCTYPE html PUBLI ...

  4. tp框架之自动验证表单

    tp框架的create自动加载表单的方法可以自动根据自己定义的要求来验证表单里面的内容,但是由于是在后台执行代码,会拖慢程序运行速度,所以还是建议通过前端js来进行判断,后台只进行数据库的查询以及传值 ...

  5. jquery.validate:

    jqueryValidation: jquery-UI 小组组长;https://jqueryvalidation.org/;从页面性能的角度来说: 最好是把js的引入放在结束的body标签上面;基本 ...

  6. 第 一 百 天上课 PHP TP框架 数据库修改和删除

    修改的三种方式 //造数组的方式修改 public function xiugai1() { $db=D('yonghu'); $attr=array ( 'zhanghao'=>001, // ...

  7. tp框架表单验证

    之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...

  8. tp框架表单验证 及ajax

    之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...

  9. JavaScript进阶(十一)JsJava2.0版本

    JavaScript进阶(十一)JsJava2.0版本 2007年9月11日,JsJava团队发布了JsJava2.0版本,该版本不仅增加了许多新的类库,而且参照J2SE1.4,大量使用了类的继承和实 ...

  10. ESP8266进阶篇

    ESP8266进阶篇 20170225(应需要,继续使用此模块!!!) 说一下如何通过内网和外网来控制我的ESP8266的数据模块 1.内网控制:(要求手机直接连接在ESP8266的WIFI上面,使用 ...

随机推荐

  1. liunx 利用nginx 实现负载均衡

    一般采用软件实现负载均衡的有Nginx.apache.nginx 近年来使用频繁,其官网上面显示可以承载5万并发访问量,太牛了. nginx 相比 apache优势明显:Nginx 服务程序比较稳定, ...

  2. Oracle 口令文件:即 oracle密码文件

    一:文件路径位置 [oracle@localhost db_1]$ cd $ORACLE_HOME/dbs [oracle@localhost dbs]$ ls dbsorapwPROD1 hc_or ...

  3. Confluence 6 从一个备份中获得文件附件

    页面中的文件附件可以从备份中获得而不需要将备份文件导入到 Confluence 中.这个在用户删掉了附件,但是你还是想恢复这个附件的时候就变得非常有用了. 自动备份和手动备份都允许你进行这个操作,但是 ...

  4. Confluence 6 配置手动备份

    如果你希望关闭自动备份,你可以选择手动导出保存站点.请参考 Manually Backing Up the Site 页面中的内容获得更多的信息. 这些文件没有自动备份在同样的路径中,这些文件存储在 ...

  5. 第一次Java测试及感触

    周四进行了java测试,感触很深,测试的题目是用Java实现一个ATM机的管理系统.最后3个小时后,我没有完成这次测试,但是我找到了自己的很多不足,明确了自己的问题究竟在哪里. 关于这次测试我不会的最 ...

  6. Redis的消息发布和订阅

    Redis的消息发布和订阅 Author:SimpleWu GitHub-redis 什么是消息发布和订阅? Redis 发布订阅(pub/sub)是一种进程间的消息通信模式: 发送者(pub)发送消 ...

  7. hashlib、logging模块

    hashlib模块 hashlib提供了常见的摘要算法,如md5和sha1等等. 那么什么是摘要算法呢?摘要算法又称为哈希算法.散列算法.它通过一个函数,把任意长度的数据转换为一个长度固定的数据串(通 ...

  8. 使用react 在页面上引用静态图片,图片不显示

    const url='../assets/logo.png'; <img src={url} alt=''/> 1.使用require <img src={require('../a ...

  9. cf1042d 树状数组逆序对+离散化

    /* 给定一个数组,要求和小于t的段落总数 求前缀和 dp[i]表示以第i个数为结尾的小于t的段落总数,sum[i]-sum[l]<t; sum[i]-t<sum[l],所以只要找到满足条 ...

  10. CF1065D

    如果不喜欢过长代码的看官,请移步其他题解... 这题其实思想极其简单: 棋盘问题常见的算法都比较暴力,常用的有搜索和状压dp 而这道题显然没啥能状压的,所以我们考虑搜索 但是仅仅搜索是不够的,因为有极 ...