杂项
缓存
ThinkPHP采用think\Cache
类提供缓存功能支持。
设置
$options = [
// 缓存类型为File
'type' => 'File',
// 缓存有效期为永久有效
'expire'=> 0,
//缓存前缀
'prefix'=> 'think',
// 指定缓存目录
'path' => APP_PATH.'runtime/cache/',
];
Cache::connect($options);
或者通过定义配置参数的方式,在应用配置文件中添加:
'cache' => [
'type' => 'File',
'path' => CACHE_PATH,
'prefix' => '',
'expire' => 0,
],
获取缓存
dump(Cache::get('name'));
删除缓存
Cache::rm('name');
获取并删除缓存
Cache::pull('name');
清空缓存
Cache::clear();
Session
Session初始化
'session' => [
'prefix' => 'think',
'type' => '',
'auto_start' => true,
],
设置session
// 赋值(当前作用域)
Session::set('name','thinkphp');
// 赋值think作用域
Session::set('name','thinkphp','think');
判断是否存在
// 判断(当前作用域)是否赋值
Session::has('name');
// 判断think作用域下面是否赋值
Session::has('name','think');
取值
// 取值(当前作用域)
Session::get('name');
// 取值think作用域
Session::get('name','think');
删除
// 删除(当前作用域)
Session::delete('name');
// 删除think作用域下面的值
Session::delete('name','think');
清空
// 清除session(当前作用域)
Session::clear();
// 清除think作用域
Session::clear('think');
Cookie
初始化
// cookie初始化
Cookie::init(['prefix'=>'think_','expire'=>3600,'path'=>'/']);
// 指定当前前缀
Cookie::prefix('think_');
支持的参数及默认值如下:
// cookie 名称前缀
'prefix' => '',
// cookie 保存时间
'expire' => 0,
// cookie 保存路径
'path' => '/',
// cookie 有效域名
'domain' => '',
// cookie 启用安全传输
'secure' => false,
// httponly设置
'httponly' => '',
// 是否使用 setcookie
'setcookie' => true,
设置
// 设置Cookie 有效期为 3600秒
Cookie::set('name','value',3600);
// 设置cookie 前缀为think_
Cookie::set('name','value',['prefix'=>'think_','expire'=>3600]);
// 支持数组
Cookie::set('name',[1,2,3]);
判断
Cookie::has('name');
// 判断指定前缀的cookie值是否存在
Cookie::has('name','think_');
获取
Cookie::get('name');
// 获取指定前缀的cookie值
Cookie::get('name','think_');
删除cookie
Cookie::delete('name');
// 删除指定前缀的cookie
Cookie::delete('name','think_');
清空
// 清空指定前缀的cookie
Cookie::clear('think_');
分页
ThinkPHP5.0
内置了分页实现,要给数据添加分页输出功能在5.0变得非常简单,可以直接在Db
类查询的时候调用paginate
方法:
// 查询状态为1的用户数据 并且每页显示10条数据
$list = Db::name('user')->where('status',1)->paginate(10);
// 把分页数据赋值给模板变量list
$this->assign('list', $list);
// 渲染模板输出
return $this->fetch();
模板文件中分页输出代码如下:
<div>
<ul>
{volist name='list' id='user'}
<li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$list->render()}
也可以单独赋值分页输出的模板变量
// 查询状态为1的用户数据 并且每页显示10条数据
$list = User::where('status',1)->paginate(10);
// 获取分页显示
$page = $list->render();
// 模板变量赋值
$this->assign('list', $list);
$this->assign('page', $page);
// 渲染模板输出
return $this->fetch();
模板文件中分页输出代码如下:
<div>
<ul>
{volist name='list' id='user'}
<li> {$user.nickname}</li>
{/volist}
</ul>
</div>
{$page}
上传
ThinkPHP5.0
对文件上传的支持更加简单。
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();
}
}
}
move
方法成功的话返回的是一个\think\File
对象,你可以对上传后的文件进行后续操作。
多文件上传
public function upload(){
// 获取表单上传文件
$files = request()->file('image');
foreach($files as $file){
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'uploads');
if($info){
// 成功上传后 获取上传信息
// 输出 jpg
echo $info->getExtension();
// 输出 42a79759f284b767dfcb2a0197904287.jpg
echo $info->getFilename();
}else{
// 上传失败获取错误信息
echo $file->getError();
}
}
}
多文件上传重名的解决办法(同一时间上传多张图片问题)
修改源代码文件:
/xxx/thinkphp/library/think/File.php
switch ($this->rule) {
case 'date':
$savename = date('Ymd') . DS . md5(microtime(true).$this->filename);
break;
验证码
首先使用Composer安装think-captcha扩展包:
composer require topthink/think-captcha=1.*
模版内验证码的显示
<div>{:captcha_img()}</div>
<div><img src="{:captcha_src()}" alt="captcha" /></div>
使用TP5的内置验证功能,添加captcha验证规则即可
$this->validate($data,[
'captcha|验证码'=>'require|captcha'
]);
或者手动验证
if(!captcha_check($captcha)){
//验证失败
};