Tp-validate进阶

阶段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进阶的更多相关文章
- TP验证规则Validate
use think\Validate; <?php namespace app\common\model; use think\Validate; use think\Db; class Inv ...
- 基于jQuery的Validate表单验证
表单验证可以说在前端开发工作中是无处不在的~ 有数据,有登录,有表单, 都需要前端验证~~ 而我工作中用到最多的就是基于基于jQuery的Validate表单验证~ 就向下面这样~ 因为今天有个朋 ...
- tp框架验证信息
今天在这里我们学习一下tp框架里面怎么做验证. 验证又分为两种:静态验证.动态验证 首先,我们还是先做一个html界面,名为add.html.代码如下: <!DOCTYPE html PUBLI ...
- tp框架之自动验证表单
tp框架的create自动加载表单的方法可以自动根据自己定义的要求来验证表单里面的内容,但是由于是在后台执行代码,会拖慢程序运行速度,所以还是建议通过前端js来进行判断,后台只进行数据库的查询以及传值 ...
- jquery.validate:
jqueryValidation: jquery-UI 小组组长;https://jqueryvalidation.org/;从页面性能的角度来说: 最好是把js的引入放在结束的body标签上面;基本 ...
- 第 一 百 天上课 PHP TP框架 数据库修改和删除
修改的三种方式 //造数组的方式修改 public function xiugai1() { $db=D('yonghu'); $attr=array ( 'zhanghao'=>001, // ...
- tp框架表单验证
之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...
- tp框架表单验证 及ajax
之前的表单验证都是用js写的,这里也可以使用tp框架的验证.但是两者比较而言还是js验证比较好,因为tp框架验证会运行后台代码,这样运行速度和效率就会下降. 自动验证是ThinkPHP模型层提供的一种 ...
- JavaScript进阶(十一)JsJava2.0版本
JavaScript进阶(十一)JsJava2.0版本 2007年9月11日,JsJava团队发布了JsJava2.0版本,该版本不仅增加了许多新的类库,而且参照J2SE1.4,大量使用了类的继承和实 ...
- ESP8266进阶篇
ESP8266进阶篇 20170225(应需要,继续使用此模块!!!) 说一下如何通过内网和外网来控制我的ESP8266的数据模块 1.内网控制:(要求手机直接连接在ESP8266的WIFI上面,使用 ...
随机推荐
- 大数据python词频统计之hdfs分发-cacheFile
-cacheFile 分发,文件事先上传至Hdfs上,分发的是一个文件 1.找一篇文章The_Man_of_Property.txt: He was proud of him! He could no ...
- swift 学习- 17 -- 析构器
// 析构器 只适用与 类类型, 当一个类的实例被释放之前, 析构器会被立即调用, 析构器用关键字 deinit 来标示, 类似于构造器要用 init 来标示 // 析构过程原理 // Swift 会 ...
- popup的简单应用举例(具体在增删改查组件中用到)以及补充的知识点
一.首先说一下自执行函数 1. 立即执行函数是什么?也就是匿名函数 立即执行函数就是 声明一个匿名函数 马上调用这个匿名函数 2.popup的举例 点击,弹出一个新的窗口.保存完事,页面不刷新数据就返 ...
- LeetCode(72):编辑距离
Hard! 题目描述: 给定两个单词 word1 和 word2,计算出将 word1 转换成 word2 所使用的最少操作数 . 你可以对一个单词进行如下三种操作: 插入一个字符 删除一个字符 替换 ...
- java 命令行JDBC连接Mysql
环境:Windows10 + java8 + mysql 8.0.15 + mysql-connector-java-8.0.15.jar mysql驱动程序目录 项目目录 代码: //package ...
- Python集合(set)
Python中的集合同数学中的集合概念类似,也是用于保存不重复的元素.他有可变集合(set),和不可变集合(frozenset);可变集合(set)是无序的可变的. 创建集合 直接使用{}创建 set ...
- AI-认证
AI-认证 做登录验证 #models.py class Users(models.Model): user=models.CharField(max_length=32) pwd=models.Ch ...
- 论文阅读笔记十七:RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation(CVPR2017)
论文源址:https://arxiv.org/abs/1611.06612 tensorflow代码:https://github.com/eragonruan/refinenet-image-seg ...
- Java+selenium之WebDriver对浏览器的简单操作(一)
操作浏览器的主要方法都来自 org.openqa.selenium.WebDriver 这个接口 这些方法都是在 org.openqa.selenium.remote.RemoteWebDriver这 ...
- Linux下查看80端口是否被占用
方式一: ps -ef |grep 80 方式二: netstat -anp |grep :80 方式三: lsof -i:80 方式四: netstat -tunlp |grep :80 方式五: ...