验证器
是为了在输入到数据库的时候进行验证用的
- 首先要导入验证类,并且实例化。
use think\Validate;
//代码编写,这里是用的是独立操作,注意学习验证规则
$validate = new Validate([
'name' => 'require|max:25',
'email' => 'email'
]);
$data = [
'name' => 'thinkphp',
'email' => 'thinkphp@qq.com'
];
if (!$validate->check($data)) {
dump($validate->getError());
}
写带自己验证内容提醒的,验证器,用这个就够了,别的以后研究
$rule = [
'name' => 'require|max:25',
'age' => 'number|between:1,120',
'email' => 'email',
];
$msg = [
'name.require' => '名称必须',
'name.max' => '名称最多不能超过25个字符',
'age.number' => '年龄必须是数字',
'age.between' => '年龄必须在1~120之间',
'email' => '邮箱格式错误',
];
$data = [
'name' => 'thinkphp',
'age' => 121,
'email' => 'thinkphp@qq.com',
];
$validate = new Validate($rule,$msg);
$result = $validate->check($data);
if(!$result){
echo $validate->getError();
}
利用封装来操作
简单的理解就是,在mvc以为,在建立文件夹,封装起来,等着调用
namespace app\index\validate;
use think\Validate;
class User extends Validate
{
protected $rule = [
'name' => 'require|max:25',
'email' => 'email',
];
protected $message = [
'name.require' => '用户名必须',
'email' => '邮箱格式错误',
];
}
//然后在控制器中调用
$data = input('post.');
//实例化新建的验证器
$vali = new \app\index\validate\Admin;
//在验证
if($vali->check($data)){
//这里写插入语句
}else{
dump($vali->get#rror())
}
缓存
他的用法是把经常调用的数据放起来,读库之前先判断,如果有就读缓存,如果没有就读库
//缓存的设置,在config.php里面设置
'cache' => [
// 驱动方式
'type' => 'File',
// 缓存保存目录
'path' => CACHE_PATH,
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表示永久缓存
'expire' => 0,
],
具体使用
1,导入缓存类
use think\Cache;
2,用系统类设置,这里要先获取数据才可以,包括获取,添加,删除等操作
Cache::set('name',$value,new DateTime('2017-10-1 12:00'));
3,读取缓存
dump(Cache::get('name'));
//如果name值不存在,则默认返回 false。
//支持指定默认值,例如:
dump(Cache::get('name',''));
4,删除缓存
//删除缓存
Cache::rm('name');
//获取并删除缓存
Cache::pull('name');
//如果name值不存在,则返回null。
//清空缓存
Cache::clear();
5,也可以用助手函数
$options = [
// 缓存类型为File
'type' => 'File',
// 缓存有效期为永久有效
'expire' => 0,
// 指定缓存目录
'path' => APP_PATH . 'runtime/cache/',
];
// 缓存初始化
// 不进行缓存初始化的话,默认使用配置文件中的缓存配置
cache($options);
// 设置缓存数据
cache('name', $value, 3600);
// 获取缓存数据
var_dump(cache('name'));
// 删除缓存数据
cache('name', NULL);
// 设置缓存的同时并且进行参数设置
cache('test', $value, $options);
Session
需要导入session类
use think\Session;
a)设置session
// 赋值(当前作用域)
Session::set('name','thinkphp');
// 赋值think作用域
Session::set('name','thinkphp','think');
b)获取session
// 取值(当前作用域)
Session::get('name');
// 取值think作用域
Session::get('name','think')
c)判断是否存在
// 判断(当前作用域)是否赋值
Session::has('name');
// 判断think作用域下面是否赋值
Session::has('name','think');
d)删除session
// 删除(当前作用域)
Session::delete('name');
// 删除think作用域下面的值
Session::delete('name','think');
// 指定当前作用域
Session::prefix('think');
// 取值并删除
Session::pull('name');
如果name的值不存在,返回Null。
// 清除session(当前作用域)
Session::clear();
// 清除think作用域
Session::clear('think');
e)用助手函数操作
// 初始化session
session([
'prefix' => 'module',
'type' => '',
'auto_start' => true,
]);
// 赋值(当前作用域)
session('name', 'thinkphp');
// 赋值think作用域
session('name', 'thinkphp', 'think');
// 判断(当前作用域)是否赋值
session('?name');
// 取值(当前作用域)
session('name');
// 取值think作用域
session('name', '', 'think');
// 删除(当前作用域)
session('name', null);
// 清除session(当前作用域)
session(null);
// 清除think作用域
session(null, 'think');
cookie
cookie没有session安全,登陆信息用session,其他信息用cookie
a)设置cookie 先导入cookie类
// 设置Cookie 有效期为 3600秒
Cookie::set('name','value',3600);
// 设置cookie 前缀为think_
Cookie::set('name','value',['prefix'=>'think_','expire'=>3600]);
// 支持数组
Cookie::set('name',[1,2,3]);
b)判断cookie
Cookie::has('name');
// 判断指定前缀的cookie值是否存在
Cookie::has('name','think_');
c)获取cookie
Cookie::get('name');
// 获取指定前缀的cookie值
Cookie::get('name','think_');
d)删除cookie
Cookie::delete('name');
// 删除指定前缀的cookie
Cookie::delete('name','think_');
// 清空指定前缀的cookie
Cookie::clear('think_')
e)用助手函数
// 初始化
cookie(['prefix' => 'think_', 'expire' => 3600]);
// 设置
cookie('name', 'value', 3600);
// 获取
echo cookie('name');
// 删除
cookie('name', null);
// 清除
cookie(null, 'think_');
系统分页
下面是代码直接复制,使用就行
a)控制器代码
// 查询状态为1的用户数据 并且每页显示10条数据
$list = User::where('status',1)->paginate(10,true);//这个事简洁书写
$list = Db::name('user')->where('status',1)->paginate(10);
// 把分页数据赋值给模板变量list
$this->assign('list', $list);
// 渲染模板输出
return $this->fetch();
b)页面中代码(注意练习),也可以简洁书写
<div>
<ul>
{volist name='list' id='user'}
<li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$list->render()}
文件上传
a)导入请求类,
use think\Request;
b)页面编写
<form action="/index/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image" /> <br>
<input type="submit" value="上传" />
</form>
c)控制器书写
public function upload(){
// 获取表单上传文件 例如上传了001.jpg
//这里可以用别方法,目的是获取上传的信息
$file = request()->file('image');
// 移动到框架应用根目录/public/uploads/ 目录下
if($file){
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
// 成功上传后 获取上传信息
// 输出 jpg
echo $info->getExtension();
// 输出 20160820/42a79759f284b767dfcb2a0197904287.jpg
echo $info->getSaveName();
// 输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
d)多文件上传(直接看手册)
验证码
a)首先判断系统支持验证码,不支持就安装扩展
b)使用验证码
模版内验证码的显示
<div>{:captcha_img()}</div>
或者
<div><img src="{:captcha_src()}" alt="captcha" /></div>
c)验证
使用TP5的内置验证功能,添加captcha验证规则即可
$this->validate($data,[
'captcha|验证码'=>'require|captcha'
]);
或者手动验证
if(!captcha_check($captcha)){
//验证失败
};