酷站(www.ku0.com)-致力于为互联网从业者提供动力!

热门关键词:  企业  as  baidu  c4rp3nt3r  美女
酷站

【云小站】新老客都返现+现金红包+瓜分60万奖池
酷站

php

旗下栏目: php js asp Flex Ajax JSP jquery asp.net C语言 java 正则表达式 微信小程序 Android IOS

ThinkPHP类似AOP思想的参数验证的实现代码

来源:互联网搜集 作者:秩名 人气: 发布时间:2019-12-19
本篇文章主要介绍了ThinkPHP类似AOP思想的参数验证的实现代码,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴们可以参考一下,也感谢大家对酷站(ku0.com)的支持。

思路讲解:不管是在开发 API 还是做后台项目的时候,后端永远不要相信前端传输的参数,通常要做的是验证参数的合法性和安全性。那么在实际项目开发的时候,怎么简便的验证参数呢。

TP 提供了好几种参数验证的方式,比如验证器,独立验证,又或者在继承 Controller 基类的情况下使用 validate 方法。相比而言,验证器还是最佳选择。一个控制器有多个方法,也就表示有多个请求,也就表示有多个场景。一个项目不止一个控制器,那就表示不止需要建立一个验证器。面向对象的思想,就需要我们建立一个基类验证器,然后让子类继承就行了。

那么怎么实现参数验证呢,下面我就介绍下类似 AOP 思想的参数验证的实现。

定义验证器基类

定义基类 app\common\validator\BaseValidator.php
 

<?php
 
namespace app\common\validator;
 
use app\common\exception\ParamException;
use think\Validate;
 
class BaseValidator extends Validate
{
  /**
   * @param string $scene
   * @return bool
   * @throws ParamException
   */
  public function checkParams($scene='')
  {
    $params = input('param.');
    $res = $this->scene($scene)->check($params);
 
    if( ! $res ){
      $error = $this->error;
      if(is_array($error)){
        $error = implode(',',$error);
      }
      throw new ParamException(['errMsg'=>$error,]);
    }
    return $res;
  }
 
  //自定义验证规则
 
}

定义验证器

<?php
 
namespace app\common\validator\user;
 
use app\common\validator\BaseValidator;
 
class UserValidator extends BaseValidator
{
  protected $rule =  [
    'name' => 'require|max:25',
    'age'  => 'number|between:1,120',
    'email' => 'email',
  ];
 
  protected $message =  [
    'name.require' => '名称必须',
    'name.max'   => '名称最多不能超过25个字符',
    'age.number'  => '年龄必须是数字',
    'age.between' => '年龄只能在1-120之间',
    'email'    => '邮箱格式错误',
  ];
 
  protected $scene = [
    'register' => ['name','email'],
  ];
}

验证参数

User.php 控制器 register 方法,实例化验证器,并进行场景验证。
 

public function register(Request $request){
  $validator = new UserValidator();
  $validator->checkParams('register');
  .
  .
  .
}  

至此,类似于 AOP 思想的参数验证就完成了。
版权声明:本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 959677720#qq.cn(#换@) 举报,一经查实,本站将立刻删除。
原文链接:https://learnku.com/articles/38289

相关文章

  • php使用fputcsv实现大数据的导出

    php使用fputcsv实现大数据的导出

    为了实验大数据的导出,我们这里先自已创建一张大表,表结构如下: ? 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE `tb_users` ( `id` int (11) unsigned NOT NULL AUTO_INCREMENT COMMENT 用户ID , ` name ` varchar (32) DEFAULT COMMENT 用户......
    02-27
  • php5.3/5.4/5.5/5.6/7常见新增特性介绍

    php5.3/5.4/5.5/5.6/7常见新增特性介绍

    php新增的特性,只是略微整理,并不完全。 一、php5.3添加的新特性 1、?:简化的三元运算符 ? 1 2 3 ?php $cur = $cur ? $cur : 1; $cur = $cur ?: 1; 2、匿名函数 ? 1 2 3 4 5 6 7 8 9 10 11 ?php $test = function () { echo test ; }; ......
    02-27
  • ThinkPHP5与单元测试PHPUnit的使用

    ThinkPHP5与单元测试PHPUnit的使用

    thinkphp5.0 是 tp 发展路线第一个支持 composer 的。tp 有自己的载入机制,composer 也有自己的载入机制。 官方提供了 think-testing 组件可以通过 composer require topthink/think-testing 1.* 安装,但我对这个测试组件不是很满意,......
    02-23
  • PHP Beanstalkd消息队列的安装与使用方法

    PHP Beanstalkd消息队列的安装与使用方法

    一、Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二、Beanstalkd特性 1、支持优先级(支持任务插队) 2、延迟(实现定时任务) 3、持久化(定时把内存中的数据刷到binlog日志) 4、预留(把任务设置成预留,消费者无法......
    02-21
  • php-7.3.6编译安装过程介绍

    php-7.3.6编译安装过程介绍

    1.、安装编译工具及库文件(使用yum命令安装) yum install -y apr* autoconf automake bison bzip2 bzip2* cloog-ppl cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd g......
    02-12
  • ThinkPHP5&5.1实现验证码的生成,使用及点击刷新

    ThinkPHP5&5.1实现验证码的生成,使用及点击刷新

    验证码现在是用户登录、支付等很多环节的必备元素,ThinkPHP55.1给我们提供了验证码的生成方式,也是非常的简单,在这里写一个完整的验证码验证的使用方法,供大家参考。 前台用户在登录时候需要验证码验证才能登录。首先使用Composer安......
    02-09
  • laravel邮件发送的代码教程

    laravel邮件发送的代码教程

    laravel自带SwiftMailer库,集成了多种邮件API,可以很方便的实现邮件的发送。在本教程中使用到的是SMTP(Simple Message Transfer Protocol)简单邮件传输协议,通常理解为邮件发送服务器。 以126邮箱为例 使用126邮箱的话,需要开启POP......
    01-31
  • Laravel框架自定义分页样式操作代码

    Laravel框架自定义分页样式操作代码

    操作步骤如下: (1) 对应public/css/paging.css 文件建立分页样式. (2) 控制器查出分页数据使用 paginate函数进行分页处理.(禁止使用group by处理查询). (3) 对应视图引入分页样式. 例如: paging.css 样式文件代码(复制即可用,实际操作过)......
    01-26
  • 实现Laravel jwt多表(多用户端)验证隔离教程

    实现Laravel jwt多表(多用户端)验证隔离教程

    Tips: tymon/jwt-auth 作者已通过增加 prv 字段修复这一问题#1167,但是如果你是用 dingo api + jwt 的话,该问题依然存在。# JWT 多表验证隔离 为什么要做隔离 当同一个 laravel 项目有多端(移动端、管理端......)都需要使用 jwt 做用......
    12-19
  • ThinkPHP类似AOP思想的参数验证的实现代码

    ThinkPHP类似AOP思想的参数验证的实现代码

    思路讲解:不管是在开发 API 还是做后台项目的时候,后端永远不要相信前端传输的参数,通常要做的是验证参数的合法性和安全性。那么在实际项目开发的时候,怎么简便的验证参数呢。 TP 提供了好几种参数验证的方式,比如验证器,独立验证......
    12-19

最新更新