thinkphp5.1表单验证核心是服务端验证,依赖think\validate类实现,支持独立验证器、场景化和自定义规则;需在app\common\validate\下创建验证器类,定义$rule、$message、$scene及自定义方法,并在控制器中实例化调用check()执行验证。

ThinkPHP5.1 的表单验证核心是服务端验证必须做,不能只依赖前端 JavaScript。它主要靠独立验证器(think\Validate 类)实现,结构清晰、复用性强,也支持场景化和自定义规则。
一、创建验证器类
在 app\common\validate\ 目录下新建 PHP 文件(如 Login.php),继承 \think\Validate:
-
$rule 定义字段规则,格式为
'字段名' => '规则1|规则2',例如:'username' => 'require|max:20' -
$message 定义错误提示,键名为
'字段名.规则',例如:'username.require' => '用户名不能为空' - 常见内置规则有:
require、email、mobile、number、min、max、length、in、between等
二、在控制器中调用验证
接收表单数据后,实例化验证器并检查:
- 用
$this->request->param()或$this->request->post()获取全部或指定字段数据 - 实例化验证器:
$validate = new \app\common\validate\Login(); - 执行验证:
if (!$validate->check($data)) { return $this->error($validate->getError()); } - 验证通过后才执行数据库写入等后续操作
三、使用场景验证(按用途区分规则)
同一个验证器可适配不同操作,比如新增和编辑需要不同字段:
- 在验证器中定义
$scene属性:protected $scene = ['add' => ['username', 'email'], 'edit' => ['username']] - 控制器中指定场景:
if (!$validate->scene('add')->check($data)) { ... } - 这样避免为每个操作单独建验证器,逻辑更集中
四、添加自定义验证方法
当内置规则不够用(如验证手机号、身份证、远程查重),可在验证器中写方法:
- 规则写成:
'phone' => 'checkPhone'(注意不加括号) - 方法命名与规则一致,返回
true表示通过,否则返回错误提示字符串 - 示例:
protected function checkPhone($value) { return preg_match('/^1[3-9]\d{9}$/', $value) ? true : '手机号格式不正确'; } - 方法内可调用模型查询、API 请求等,灵活扩展
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











