使用的tp框架是3.2.2
IDE 为phpstorm
集成环境是 xammp
数据库mysql 管理工具是NAVCAT for mysql
使用了smarty模板引擎
<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">吃饭1tr><br>
<tr><input type="checkbox" name="hobby[]" value="2">睡觉2tr><br>
<tr><input type="checkbox" name="hobby[]" value="3">打摆子3tr><br>
<tr><input type="submit" value="提交注册">tr>
table>
form>
body>
html>
$info = $m->create();
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}来将错误信息输出。{$errorinfo.username|default:""}
这里使用了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方法动态创建自动验证规则
这里只对静态方式简单的使用。更多的可以参考使用手册