一些说明
使用的tp框架是3.2.2
IDE 为phpstorm
集成环境是 xammp
数据库mysql 管理工具是NAVCAT for mysql
使用了smarty模板引擎
tp_user数据表的结构
用户注册表单的html代码和页面
代码(包括使用了smarty模板引擎输出错误信息$那一块)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<form action="{$smarty.const.__SELF__}" method="post">
<table>
<h3>用户注册</h3>
<tr><span>用户名:</span><input type="text" name="username" value=""></tr><span style="color: red">{$errorinfo.username|default:""}</span><br>
<tr><span>密 码:</span><input type="text" name="psw" value=""></tr><span style="color: red">{$errorinfo.psw|default:""}</span><br>
<tr><span>确认密码:</span><input type="text" name="pswok" value=""></tr><span style="color: red">{$errorinfo.pswok|default:""}</span><br>
<tr><span>邮 箱:</span><input type="text" name="mail" value=""></tr><span style="color: red">{$errorinfo.mail|default:""}</span><br>
<tr><span>qq号码:</span><input type="text" name="qq" value=""></tr><span style="color: red">{$errorinfo.qq|default:""}</span><br>
<tr><span>手机号码:</span><input type="text" name="tel" value=""></tr><span style="color: red">{$errorinfo.tel|default:""}</span><br>
<span>爱好:</span><span style="color: red">{$errorinfo.hobby|default:""}</span><br>
<tr><input type="checkbox" name="hobby[]" value="1">吃饭1</tr><br>
<tr><input type="checkbox" name="hobby[]" value="2">睡觉2</tr><br>
<tr><input type="checkbox" name="hobby[]" value="3">打摆子3</tr><br>
<tr><input type="submit" value="提交注册"></tr>
</table>
</form>
</body>
</html>
页面截图
目录结构
处理过程
- 首先创建一个数据库表的对象
$m = new \Model\UserModel();
静态定义方式因为必须定义模型类,所以只能用D函数实例化模型或者上面的形式。 - 使用create方法创建数据对象,此时对象是保存在内存中的,并没有实际的写入到数据库中。并且以数组的形式保存。create方法执行的同时会自动触发表单验证和其他一些验证方法。
$info = $m->create();
- 使用静态方式验证:在模型类里面通过$_validate属性定义验证规则
代码如下:(具体的验证说明可以参考开发手册“模型”目录下的“自动验证”那一部分)
namespace Model;
use Think\Model;
class UserModel extends Model
{
// 自动验证定义
//array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)
protected $patchValidate = true;//打开批处理验证
protected $_validate = array(
//对用户名验证,不能为空
array('username','require',"username is null!"),
array('username','',"username is exist!",0,'unique',1),
array('psw','require','psw is null!'),
array('pswok','require','pswok is null!'),
array('pswok','psw','psw and pswok is error!',0,'confirm'),
array('mail','email','EMAIL is error'),
//array('qq','require',"qq number is null!"),
array('qq','number','qq number is error',2),
array('qq','5,12','qq length is error',2,'length'),
array('hobby','check_hobby',"hobby num must over 2",0,'callback')
);
function check_hobby($arg){
$len = count($arg);
if($len<2){
return false;//会自动输出验证的错误信息
}
return true;
}
}
4 将错误信息显示到前台页面上去
我们通过getError()方法获取到错误信息,再通过assign()方法将错误信息保存起来$this->assign("errorinfo",$m->getError());
。在前端通过{$errorinfo.username}来将错误信息输出。<span style="color: red">{$errorinfo.username|default:""}</span>
这里使用了default设置默认值,防止无值情况显示错误。
下面是UserController下的register方法的完整代码:
function register(){
$m = new \Model\UserModel();
if(!empty($_POST)){
//dump($_POST);
$info = $m->create(); //收集$_POST的数据并返回,同时触发表单自动验证etc.
if($info){
//dump($info);
$info['hobby'] = implode(',',$info['hobby']);//将数组信息转换成字符串,这样才可以用来插入到数据库中
//dump($info);
if($m->add($info)){
$this->redirect("Index/index");
//dump($info);
}
}else{
//dump($m->getDbError());
//dump($m->getError());
$this->assign("errorinfo",$m->getError());
}
}
$this->display();
}
最后
自动验证包括静态方式和动态方式。
1. 静态方式:在模型类里面通过$_validate属性定义验证规则。
2. 动态方式:使用模型类的validate方法动态创建自动验证规则
这里只对静态方式简单的使用。更多的可以参考使用手册