请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

tp5验证器怎么调用

创建了一个用户验证器
<?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]

正在回答 回答被采纳积分+3

2回答

7七月 2017-05-04 16:41:43

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

0 回复 有任何疑惑可以回复我~
7七月 2017-05-04 14:42:35

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

0 回复 有任何疑惑可以回复我~
  • 提问者 sxfenglei #1
    就是validate怎么用,我看教程说有validate类 和 工具函数 还有 注入式这三个分别怎么使用感觉有点混乱。
    自己尝试写了一个validate验证器  然后在控制器中调用 但是奇怪的是在控制器中调用报错 错误提示找不到数据表(validate验证将要验证的字段转换成了表名)
    本来要验证的是用户表的email和pass字段 但是validate却把email转换成了数据表fl_email然后在数据库中查找去了
    回复 有任何疑惑可以回复我~ 2017-05-04 14:55:42
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信