ThinkPHP5.1表单验证需定义继承\think\Validate的验证器类,配置$rule、$message和$scene;支持内置规则(如require、email)、自定义方法(如checkPhone)及控制器两种调用方式。

ThinkPHP5.1 添加表单验证规则,核心是定义一个继承 \think\Validate 的验证器类,并在其中配置 $rule、$message 和可选的 $scene。不需要额外安装扩展,框架原生支持。
定义验证器类
在 app\common\validate\ 目录下新建 PHP 文件(如 Login.php),内容结构如下:
- 命名空间为
app\common\validate - 继承
\think\Validate -
$rule数组中按字段名定义规则字符串,用竖线|分隔多个规则(如'username' => 'require|alphaNum|max:20') -
$message数组定义提示语,键名为字段名.规则名(如'username.require' => '用户名不能为空')
常用内置规则示例
TP5.1 提供了丰富内置规则,直接写进 $rule 即可生效:
-
require:必填 -
email:邮箱格式 -
number:纯数字 -
integer:整数 -
max:20/min:6:长度或数值范围 -
between:1,100:在指定区间内 -
confirm:password:与password字段值一致(用于密码确认) -
token:校验表单令牌(需配合模板中的{:token()}或手动传__token__字段)
添加自定义验证方法
当内置规则无法满足需求(比如验证手机号、身份证、远程查重),可在验证器类中添加 public 方法:
立即学习“PHP免费学习笔记(深入)”;
- 在
$rule中写成'phone' => 'checkPhone'(不加括号) - 定义方法
protected function checkPhone($value) - 方法返回
true表示通过;返回字符串表示失败并作为错误提示(如return '手机号格式不正确') - 方法体内可用正则、数据库查询等任意逻辑
控制器中调用验证
有两种常用方式:
-
实例化验证器:
$validate = new \app\common\validate\Login(); if (!$validate->check($data)) { $this->error($validate->getError()); } -
使用控制器内置 validate() 方法:
$result = $this->validate($data, 'Login'); if (true !== $result) { $this->error($result); }
注意:$data 是关联数组,键名必须和验证规则中定义的字段名完全一致(如 ['username' => 'admin', 'password' => '123'])。



















