阶段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. android系统下消息推送机制

    一.推送方式简介: 当前随着移动互联网的不断加速,消息推送的功能越来越普遍,不仅仅是应用在邮件推送上了,更多的体现在手机的APP上.当我们开发需要和服务器交互的应用程序时,基本上都需要获取服务器端的数 ...

  2. 转:如何在Vue项目中使用vw实现移动端适配

    https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...

  3. Oracle数据库内存使用情况分析查看

    SGA.PGA使用情况 select name,total,round(total-free,2) used, round(free,2) free,round((total-free)/total* ...

  4. vivado 下安装modelsim

    安装modelsim 下载链接:http://pan.baidu.com/s/1i4vHDbR 密码:dksy 1.运行modelsim-win64-10.4-se.exe,安装软件: 注意事项:安装 ...

  5. 给artDialog插件增加动画效果

    领导想给弹窗增加几种动画效果,以前用过layer弹窗,效果不错,它的动画是用的样式,实现很简单,所以把动画拷贝了过来,打包到现在的artDialog.js里... 使用方式:新增配置参数{anim:4 ...

  6. Python基础之常用模块

    一.time模块 1.时间表达形式: 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: 1.1.时间戳(timestamp) :通常来说,时间 ...

  7. HashMap&线程

    1.HashMap概念 HashMap是一个散列表,存储内容是键值对(key-value)的映射, HashMap继承了AbstractMap,实现了Map.Cloneable.java.io.Ser ...

  8. 10进制 VS 2进制

    10进制 VS 2进制 时间限制: 1 Sec  内存限制: 32 MB 题目描述 样例输出 623 #include<stdio.h> #include<string.h> ...

  9. Python自定义排序

    比如自定义了一个class,并且实例化了这个类的很多个实例,并且组成一个数组.这个数组要排序,是通过这个class的某个字段来排序的.怎么排序呢? 有两种做法: 第一种是定义__cmp__( )方法: ...

  10. Nancy 寄宿IIS

    一:简介 Nancy是一个轻量级的独立的框架,下面是官网的一些介绍: Nancy 是一个轻量级用于构建基于 HTTP 的 Web 服务,基于 .NET 和 Mono 平台,框架的目标是保持尽可能多的方 ...