学习内容:
视频教程:
https://www.kancloud.cn/tpshop/thinkphp5/228860
完全开发手册:https://www.kancloud.cn/manual/thinkphp5/129352
教程中的代码:https://github.com/phpervip/tp5a
TP5输入和验证
1.表单提交
2.表单验证
3.错误提示
4.自定义验证规则
5.控制器验证
演示:
创建控制器 创建视图
创建验证器
图1
图2
form表单提交
Controller
1.自动收集数据input(‘post.’)
2.自动检测字段allField(true)
3.自动校验正确性validate(true),User验证器配置各个字段验证规则
永远不要相信用户的数据,所以现在给表单提交沽加数据验证
创建验证器
关于生日,
提交时,填写日期格式:2001-01-01,
入库时,是,int(10)
显示时,是,2001-01-01,
model中:
<?php
// application/index/model/User.php
namespace app\index\model;
use think\Model;
class User extends Model
{
// 定义类型转换,这样就不用读取器,修改器
// protected $dataFormat = 'Y/m/d';
protected $type=array(
'reg_time'=>'timestamp:Y-m-d',
'nickname'=>'serialize',
'birthday'=>'timestamp:Y-m-d'
);
// 定义自动完成的属性
protected $insert = ['status'=>1];
//protected $update = ['status'=>1];
// 还可以结合修改器来指定自动完成
protected function setSexAttr($value,$data){
return $data['head_pic']=='boy.jpg'?1:0;
}
// 自动完成 insert update auto
protected $update = array(
'sex' =>0
);
public function getRegTimeAttr($value,$data){
return date('Y-m-d',$value).$data['nickname'];
}
public function setRegTimeAttr($value){
return strtotime($value);
}
}
validate 中。
<?php
// application/index/validate/User.php
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
// 验证规则
protected $rule = [
['nickname','require|min:5','昵称必须|昵称不能短于5个字符'],
['email','email','邮箱格式错误'],
['birthday','dateFormat:Y-m-d','生日格式错误']
];
}
<?php
// application/index/controller/User.php
namespace app\index\controller;
use think\Controller;
use app\index\model\User as mUser;
class User extends Controller
{
// 创建用户数据页面
public function create(){
return view();
}
// 新增用户数据
public function add_0(){
// 自动收集表单数据 input('post.')
// 自动排除不相关字段
// 自动校验非法字段
// 自动生成insert 语句 执行入库
$user = new mUser;
if($user->allowField(true)->validate(true)->save(input('post.'))){
return '用户['.$user->nickname.':'.$user->id .']新增成功';
}else{
return $user->getError();
}
}
// 单独验证某字段
public function add(){
$data = input('post.');
// 验证birthday 是否是有效的日期
$check = Validate::is($data['birthday'],'date');
if(false===$check){
return 'birthday日期格式非法';
}
// 因为Controller名是User,避免重复model取别名为mUser
$user = new mUser;
// 数据保存
$user->allowField(true)->save($data);
return '用户['.$user->nickname.':'.$user->id.']新增成功';
}
}