tp5验证器怎么调用

来源:4-7 工欲善其事必先利器:构建接口参数校验层

sxfenglei

2017-05-04

创建了一个用户验证器
<?php
namespace app\common\validate;

use think\Validate;

class User extends Validate
{
protected $rule = [
'email|邮箱'=>'email|unique:email',
'pass|密码'=>'require|min:6',
'phone|手机号'=>'regex:^1\d{10}|unique:phone',
];

protected $message = [
'email.email'=>'邮箱格式有误',
'email.unique'=>'邮箱已存在',
'pass'=>'密码只是6位',
'phone.regex'=>'手机号码格式有误',
'phone.unique'=>'手机号码已存在',

];

protected $scene = [
//登录
'signin'=>['email'=>'email','pass'=>'require|min:6'],
];
}

然后在控制器中调用User验证器中的signin进行验证

<?php
namespace app\index\controller;

use think\Controller;
use think\Request;
use app\common\validate\User as UserValidate;
use think\Log;
use app\common\model\User as UserModel;

class Login extends Controller
{
public function login()
{
if(Request::instance()->isAjax()){
$data = [
'email'=>Request::instance()->param('account'),
'pass'=>Request::instance()->param('password')
];   
$validate = new UserValidate();
Log::log($validate->scene('User.signin')->check($data));
if(!$validate->scene('User.signin')->check($data)){
dump($validate->getError());
}
 
}
  

}

然后前端通过jquery 的$.post调用 报错了 为啥把要验证的email字段变成了表名fl_email这表是不存在的因为要验证的是user表的email字段

[42S02]SQLSTATE[42S02]: Base table or view not found: 1146 Table 'fldatabase.fl_email' doesn't exist[E:\phpStudy\WWW\thinkphp\library\think\db\connector\Mysql.php:65]

写回答

2回答

7七月

2017-05-04

你没有看 视频课程吗。视频课程可是一步步的 将验证器怎么用 演示出来了啊。

0
0

7七月

2017-05-04

您这个表述有些混乱。到底是什么问题?从错误异常看,你触发了一个SQL语句,这个语句不正确,fldatabase.fl_email,你是不是设置了什么数据表前缀?还有就是验证器和数据表又有什么关系呢?

0
1
sxfenglei
就是validate怎么用,我看教程说有validate类 和 工具函数 还有 注入式这三个分别怎么使用感觉有点混乱。 自己尝试写了一个validate验证器 然后在控制器中调用 但是奇怪的是在控制器中调用报错 错误提示找不到数据表(validate验证将要验证的字段转换成了表名) 本来要验证的是用户表的email和pass字段 但是validate却把email转换成了数据表fl_email然后在数据库中查找去了
2017-05-04
共1条回复

微信小程序电商实战 从前端到后端的全流程精讲

全栈工程师/前后端都讲/架构思想/ RESTFul API、MySQL表设计

4805 学习 · 4382 问题

查看课程