- 🏠 简介
- 🔌 api接口
-
🔧 插件开发
- 介绍
- 插件优势
- 新建插件
- 技术栈
- 插件开发规范
- 插件目录结构
- model 层开发
- service 层开发
- api 接口开发
- menu 菜单开发
-
event 事件钩子开发
- 开发指南
- 常用事件
- SiteInit 站点初始化事件
- AddSiteAfter 站点创建后事件
- MemberRegister 会员注册后事件
- MemberLogin 会员登录后事件
- PayCreate 支付创建事件
- PaySuccess 支付成功事件
- RefundSuccess 退款成功事件
- TransferSuccess 转账成功事件
- BottomNavigation 底部导航事件
- NoticeData 消息模板数据内容事件
- GetQrcodeOfChannel 创建二维码事件
- ExportDataType 导出数据类型事件
- ExportData 导出数据源事件
- GetPosterType 海报类型事件
- GetPosterData 海报数据事件
- ShowCustomer 应用管理加载事件
- GetWechatTransferTradeScene 微信支付转账场景事件
- ThemeColor 主题风格事件
- initWap 手机端初始化加载事件
- dict 数据字典开发
- layout 自定义布局开发
- job 消息队列和计划任务开发
- notice 消息发送开发
- printer 小票打印模板开发
- export 数据导出开发
- diy 自定义组件/页面装修开发
- diy 自定义表单组件开发
- poster 自定义海报开发
- icon 引入图标
- 支付方式开发
- upgrade 插件版本升级
- 打包插件
- 授权信息变更回调通知
- 官网上架
- 📝 二次开发须知
- 👨💻 二次开发指导
-
🎬 二次开发应用插件视频教程
- 二次开发安装视频教程
- 准备工作与创建插件
- 插件目录整体说明
- 插件admin目录
- 插件app目录说明(adminapi、api、验证器)
- 插件app目录(dict、job)
- 插件app目录说明(lang、listener)
- 插件app目录说明(model、service)
- 插件uniapp目录说明
- 插件开发之后台功能开发(代码生成器)
- 插件开发之uniapp功能开发(api)第一节
- 插件开发之uniapp功能开发(api)第二节
- 插件开发之uniapp功能开发(api)第三节
- 插件安装与打包原理
- 消息队列开发
- 计划任务开发
- DIY组件和自定义页面装修开发
- 支付接口开发
- 插件升级包打包流程以及云编译功能
验证器
验证器是ThinkPHP框架提供的数据验证机制,用于验证用户输入数据的合法性。
验证器基本结构
验证器文件位置
验证器文件通常位于插件的app/validate目录下,按照功能模块进行分类。例如:
niucloud/addon/hello_world/app/validate/
├── user/
│ └── User.php # 用户相关验证器
└── order/
└── Order.php # 订单相关验证器
验证器基本代码结构
验证器类需要继承core\base\BaseValidate类,并定义以下三个主要属性:
<?php
namespace addon\hello_world\app\validate\user;
use core\base\BaseValidate;
/**
* 用户验证器
* Class User
* @package addon\hello_world\app\validate\user
*/
class User extends BaseValidate
{
// 验证规则
protected $rule = [
'user_name' => 'require|max:50',
'mobile' => 'require|mobile',
'status' => 'number|between:0,1',
];
// 错误提示消息
protected $message = [
'user_name.require' => [ 'common_validate.require', [ 'user_name' ] ],
'user_name.max' => [ 'common_validate.max', [ 'user_name', 50 ] ],
'mobile.require' => [ 'common_validate.require', [ 'mobile' ] ],
'mobile.mobile' => [ 'common_validate.mobile', [ 'mobile' ] ],
'status.number' => [ 'common_validate.number', [ 'status' ] ],
'status.between' => [ 'common_validate.between', [ 'status', 0, 1 ] ],
];
// 验证场景
protected $scene = [
"add" => [ 'user_name', 'mobile', 'status' ],
"edit" => [ 'user_name', 'status' ],
"login" => [ 'mobile' ],
];
}
验证规则详解
内置验证规则
ThinkPHP框架提供了丰富的内置验证规则,常用的有:
| 规则名称 | 说明 | 示例 |
|---|---|---|
| require | 必填 | 'user_name' => 'require' |
| max | 最大长度 | 'user_name' => 'max:50' |
| min | 最小长度 | 'password' => 'min:6' |
| number | 数字 | 'age' => 'number' |
| between | 数值范围 | 'status' => 'between:0,1' |
| mobile | 手机号 | 'mobile' => 'mobile' |
| 邮箱 | 'email' => 'email' |
|
| gt | 大于 | 'id' => 'gt:0' |
| lt | 小于 | 'score' => 'lt:100' |
| eg | 等于 | 'type' => 'eg:1' |
复合验证规则
可以同时设置多个验证规则,使用竖线|分隔:
protected $rule = [
'user_name' => 'require|max:50|min:2',
'mobile' => 'require|mobile',
];
错误提示消息
错误提示消息通过$message数组定义,格式为:
'字段名.规则名' => [ '错误信息标识', [ '参数1', '参数2', ... ] ]
其中,错误信息标识通常对应语言包中的翻译键,参数会被替换到错误信息中。
示例:
protected $message = [
'user_name.require' => [ 'common_validate.require', [ 'user_name' ] ],
'user_name.max' => [ 'common_validate.max', [ 'user_name', 50 ] ],
];
验证场景
验证场景仅针对验证器有效,独立验证不存在验证场景的概念。
验证场景通过$scene数组定义,用于指定在不同场景下需要验证的字段:
protected $scene = [
"add" => [ 'user_name', 'mobile', 'status' ], // 添加场景需要验证的字段
"edit" => [ 'user_name', 'status' ], // 编辑场景需要验证的字段
"login" => [ 'mobile', 'password' ], // 登录场景需要验证的字段
];
自定义验证规则
除了使用内置验证规则外,还可以在验证器类中定义自定义验证规则。自定义验证规则方法的命名格式为check[字段名]:
<?php
namespace addon\hello_world\app\validate\user;
use core\base\BaseValidate;
class User extends BaseValidate
{
// 验证规则
protected $rule = [
'user_name' => 'require|customCheck',
];
// 错误提示消息
protected $message = [
'user_name.require' => [ 'common_validate.require', [ 'user_name' ] ],
'user_name.customCheck' => [ 'custom_validate.user_name_invalid', [ 'user_name' ] ],
];
// 自定义验证规则
protected function customCheck($value, $rule, $data = [])
{
// 自定义验证逻辑
// 返回true表示验证通过,返回错误信息字符串表示验证失败
if ($value === 'admin') {
return '用户名不能为admin';
}
return true;
}
}
验证器的使用
$this->validate($data, 'addon\hello_world\app\validate\User.add');