ThinkPHP类似AOP思想的参数验证的实现方法
时间:2022-07-27
本文章向大家介绍ThinkPHP类似AOP思想的参数验证的实现方法,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
思路讲解:不管是在开发 API 还是做后台项目的时候,后端永远不要相信前端传输的参数,通常要做的是验证参数的合法性和安全性。那么在实际项目开发的时候,怎么简便的验证参数呢。TP 提供了好几种参数验证的方式,比如验证器,独立验证,又或者在继承 Controller 基类的情况下使用 validate 方法。相比而言,验证器还是最佳选择。一个控制器有多个方法,也就表示有多个请求,也就表示有多个场景。一个项目不止一个控制器,那就表示不止需要建立一个验证器。面向对象的思想,就需要我们建立一个基类验证器,然后让子类继承就行了。那么怎么实现参数验证呢,下面我就介绍下类似 AOP 思想的参数验证的实现。
定义验证器基类
定义基类 appcommonvalidatorBaseValidator.php
<?php
namespace appcommonvalidator;
use appcommonexceptionParamException;
use thinkValidate;
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 appcommonvalidatoruser;
use appcommonvalidatorBaseValidator;
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 思想的参数验证就完成了。
以上就是本文的全部内容,希望对大家的学习有所帮助。
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- Spring MVC 4.2 CORS 跨域访问
- 剑指offer代码解析——面试题31连续子数组的最大和
- 在VS2010上使用C#调用非托管C++生成的DLL文件(图文讲解) 背景
- 剑指offer代码解析——面试题25二叉树中和为某一值的路径
- IntPtr 转 string
- 微信开发中网页授权access_token与基础支持的access_token异同
- angularJS constant和value
- 让你的HTTPS更安全
- mybatis异常 :元素内容必须由格式正确的字符数据或标记组成。
- 剑指offer代码解析——面试题24二叉搜索树的后序遍历序列
- 剑指offer代码解析——面试题23从上往下打印二叉树
- Spring Boot 集成Shiro和CAS
- 剑指offer代码解析——面试题22栈的压入、弹出序列
- php概述
- php教程
- php环境搭建
- PHP书写格式
- php变量
- php常量
- PHP注释
- php数组
- php字符串 string
- PHP整型 integer
- PHP浮点型 float
- php布尔型
- php数据类型之数组
- php数据类型之对象
- php数据类型之null
- php数据类型之间的转换
- php运算符
- php表达式
- PHP循环控制
- PHP流程控制
- php函数
- php全局变量
- PHP魔术变量
- php命名空间
- php 日期
- PHP包含文件
- php文件
- PHP 文件上传
- php Cookies
- php Sessions
- php email
- php安全email
- php错误处理
- PHP异常处理
- php过滤器
- PHP 高级过滤器
- php json
- php 表单
- PHP MySQL 简介
- PHP 连接 MySQL
- php创建数据库
- php 创建表
- php mysq 插入数据
- PHP MySQL 插入多条数据
- PHP MySQL 预处理语句
- php mysql 读取数据
- php mysql where
- PHP MySQL Order By
- PHP MySQL Update
- PHP MySQL Delete
- php ODBC
- 问题 linux下执行.sh 文件出现 no such file or directoryile
- 问题:ssm关于mybatis没有找到配置问题(not found)
- 设计模式-享元模式
- 设计模式-代理模式
- win10 x64下从0开始搭建YApi可视化接口管理平台
- dubbo(一)SPI机制与实现路径
- Go 使用三方 Redis 包操作 Redis
- 干货|这可能是最全的高并发、高性能、高可用解决方案总结
- 群晖多人协作开发
- 分享 Druid 连接池参数优化实战
- 使用 Eureka 简单实现服务健康监控日志分析
- Flask 入门系列教程(一)
- Flask 入门系列教程(二)
- CVE-2020-1472
- 盘点提高国内访问 GitHub 的速度的 9 种方案