杂项

缓存

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::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)){
 //验证失败
};
powered by GitbookEdit Time: 2023-04-08 10:28:32