首页 > 编程语言 >thinkphp5.1全局验证层封装

thinkphp5.1全局验证层封装

时间:2022-10-14 16:39:25浏览次数:76  
标签:use 封装 验证 app param think thinkphp5.1 全局 email


1.在很多场景下我们都要对表单提交的数据进行验证,那么如何实现一个验证的重复使用呢,那就让我们来封装一个全局的验证层吧!首先我们创建validate,如下图

thinkphp5.1全局验证层封装_php

这样,我们文件夹下就出现了一个文件夹。

thinkphp5.1全局验证层封装_字段名_02

2.我们来编写CeshiValidate.php

<?php

namespace app\common\validate;

use think\Validate;

class CeshiValidate extends BaseValidate
{
/**
* 定义验证规则
* 格式:'字段名' => ['规则1','规则2'...]
*
* @var array
*/
protected $rule = [
'username'=>'require',
'email'=>'require|email',
];

/**
* 定义错误信息
* 格式:'字段名.规则名' => '错误信息'
*
* @var array
*/
protected $message = [
'username.require'=>'用户名不能为空',
'email.require'=>'邮箱不能为空',
'email.email'=>'邮箱格式不正确'
];

// 验证场景
protected $scene = [
'login'=>['username','email'],
];
}

3.由于CeshiValidate.php继承BaseValidate类,所以,BaseValidate.php代码如下所示。

<?php 
namespace app\common\validate;
use think\Validate;
use app\lib\exception\BaseException;

/**
*
*/
class BaseValidate extends Validate
{

public function goCheck($scene='')
{
// 获取用户请求过来的所有数据
$param = request()->param();
// 开始验证
if(empty($param)){
$check = $this->check($param);
}else{
$check = $this->scene($scene)->check($param);
}
if(!$check){
throw new BaseException(['msg'=>$this->getError(),'errorCode'=>10000,'code'=>400]);
}
return true;
}
}
?>

4. 那么我们如何调用呢,请看下面代码。

<?php

namespace app\Index\controller;

use think\Controller;
use think\Request;
use app\lib\exception\BaseException;
use app\common\validate\CeshiValidate;

class Index extends Controller
{
/**
* 显示资源列表
*
* @return \think\Response
*/
public function index()
{
(new CeshiValidate())->goCheck('login');
}
}

简单几步,我们封装了验证类,以后不用每次都重复写了。


标签:use,封装,验证,app,param,think,thinkphp5.1,全局,email
From: https://blog.51cto.com/u_15565664/5757431

相关文章

  • pymysql封装
    1importpymysql2fromconfigs.global_dataimportMysql3frompymysql.cursorsimportDictCursor456classMysqlHandler:78def__i......
  • uni-app 4.7封装头像组件
    创建free-avart.vue文件<template><image:src="src"mode="widthFix":style="getStyle":class="type"></image></template><script>exportdefault{props:{......
  • uni-app 4.10封装聊天列表组件
    聊天组件free-media-list.vue,如下代码<template><viewhover-class="bg-light"><divclass="flexalign-stretch"><viewclass="flexalign-centerjustify-c......
  • uni-app 4.11封装全局mixin
    封装mixin(free-base.js)import$Timefrom"@/common/free-lib/time.js";exportdefault{filters:{formateTime(value){return$Time.gettime(value);}......
  • vue 全局过滤器
     官网是这样描述的“Vue.js允许你自定义过滤器,可被用于一些常见的文本格式化。过滤器可以用在两个地方:双花括号插值和 v-bind 表达式 (后者从2.1.0+开始支持)。过......
  • APICloud AVM框架 封装虚拟数字键盘组件
    AVM(Application-View-Model)前端组件化开发模式基于标准WebComponents组件化思想,提供包含虚拟DOM和Runtime的编程框架avm.js以及多端统一编译工具,完全兼容WebComponents标......
  • APICloud AVM 框架 封装树形分类选择组件 组件递归调用
    由于项目中,需要用到追加表单项目的功能,而表单项目在PC端是树形列表的形式展现,而且要实现多选功能,依上述需求开发了树形分类选择组件。组件开发中用到的知识要点是:组件递归......
  • js封装数组方法(注意:不是函数)
    对于函数都会封装,但是让你封装一个方法怎么办?首先要知道函数的概念:函数也是一个对象函数中可以封装一些功能,在需要的使用可以执行这些功能函数中也可以保存一些代码在......
  • vue封装自己的axios
    在项目中封装自己的axios在src目录下建立一个unit文件夹//unit=>http.jsimportaxiosfrom"axios";consthttp=axios.create({baseURL:"xxxx",......
  • 转:结构休中char*没有指定长度应该如何封装?
    我以前封装的c++结构体的字符串一般都有长度,如:typedefstructPP{intsize;charvalue[20];}以上结构本容易封装,只需要c#中封装为指定长度的string即可,但c中......