🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 杂项 ## Seesion 使用`seesion`需要开启初始化,中间件文件`middleware.php` ~~~php // session初始化 \think\middleware\SessionInit::class, ~~~ ~~~php class Store { public function session() { Session::set('user','mirror'); return Session::get('user'); } } ~~~ 使用`::set()`/`::get()`方法设置Session的存取 ~~~php Session::set('user','Mirror');//设置名称user和值mirror Session::get('user'); //读取user的session ~~~ > `::get()`的第二个参数可以设置默认值 > > `::all()`\=> 读取全部的session 使用`Request`请求也可以获取session: ~~~php Request::session('user');//读取user的session Request::session(); //读取全部的session ~~~ `::has()`判断是否赋值 `::delete()`删除session `::pull()`取值后删除 `::clear()`清空整个seesion `::flash()`设置闪存数据,只请求一个有效的情况 * * * ## Cookie Cookie是在客户端存储,默认情况下开启初始`config/cookie.php` 设置Cookie:`::set()` ~~~php Cookie::set('name','value',3600) ~~~ > 参数1:Cookie名称 > > 参数2:Cookie值 > > 参数3:Cookie有效时间(秒) 长期存储COOKIE:`::forever()` ~~~php Cookie::forever('name','value') ~~~ 获取Cookie:`::get()``Request::cookie()` ~~~php Cookie::get('name'); Request::cookie('name'); ~~~ `::has()`判断是否赋值 `::delete()`删除session * * * ## 缓存功能-File 缓存配置文件`cache.php`,默认生成在`runtime/cache`目录; `::set()`:设置一个缓存 `::has()`:判断缓存是否存在 `::get()`:从缓存中获取相应数据(无数据返回NULL) `::inc()`:自增 、`::dec`自减(可以设置步长) `::push()`:实现缓存的数组数据追加 `::delete()`:删除指定的缓存文件 `::pull()`:获取缓存值,然后删除这个缓存 `::remember()`:如果数据不存在则写入数据(可以依赖注入) `::clear()`:清除所有缓存 `::tag()`:可以将多个缓存归类到标签中,方便统一管理 ## 上传功能 建立一个上传表单: ~~~php <form action="Upload" enctype="multipart/form-data" method="post"> <input type="file" name="image"> <input type="submit" name="提交"> </form> ~~~ 在控制器类中创建一个`upload.php`,获取上传的数据: ~~~php class Upload { public function index() { // 获取上传的数据 $file = Request::file('image'); // 实现文件上传并写入指定目录 $sevename = Filesystem::putFile('txt',$file); } } ~~~ > `Request::file()`:可以获取文件上传表单,生成一个FILE对象; > > `Filesystem::putFile()`:可以将FILE对象文件上传到指定的目录位置,配置文件`config/filesystem.php`;参数1:目录名,参数2:FILE文件对象,参数3:上传文件的命名规则(date、md5、sha1等)也支持自定义名规则; **多文件上传**: ~~~php <form action="Upload" enctype="multipart/form-data" method="post"> <input type="file" name="image[]"><br> <input type="file" name="image[]"><br> <input type="file" name="image[]"><br> <input type="file" name="image[]"><br> <input type="submit" name="提交"> </form> ~~~ ~~~php class Upload { public function index() { // 获取上传的数据 $file = Request::file('image'); // 实现文件上传并写入指定目录 $sevename = []; foreach($file as $files){ $sevename[] = Filesystem::putFile('txt',$files); } } } ~~~ **文件验证**: 结合验证器,针对上传的文件进行验证: | 验证参数 | 说明 | | --- | --- | | fileSize | 上传文件的最大字节 | | fileExt | 文件后缀,多个用逗号分割或者数组 | | fileMime | 文件MIME类型,多个用逗号分割或者数组 | | image | 验证图像文件的尺寸和类型 | ~~~php class Upload { public function index() { // 获取上传的数据 $file = Request::file('image'); // 验证 $validate = Validate::rule([ 'image' => 'file|fileExt:jpg,png,gif' ]); $result = $validate->check([ 'image'=>$file ]); // 实现文件上传并写入指定目录 if($result) { foreach ($file as $files) { $sevename = Filesystem::putFile('txt', $files); } dump($sevename); } else { dump($validate->getError()); } } } ~~~ ## 多语言 中间件文件`middleware.php`中开启多语言切换功能 ~~~php \think\middleware\LoadLangPack::class ~~~ 配置文件`config/lang.php`文件,设置`zh-cn`中文语言 ## 验证码功能 验证码不是内置功能,需要composer引入: ~~~php composer require topthink/think-captcha ~~~ ~~~php <div>{:captcha_img()}</div> ~~~ > 支持点击刷新 ~~~php <img src="{:captcha_src()}" alt="captcha"> ~~~ > 不支持点击刷新 ~~~php class Upload { public function index() { $validate = Validate::rule([ 'captcha' => 'require|captcha' ]); $result = $validate->check([ 'captcha' => input('post.code') ]); if($result){ return '验证码输入正确'; } else { return '验证码输入错误'; } } } ~~~ | 参数 | 描述 | 默认 | | --- | --- | --- | | codeSet | 验证码字符集合 | 略 | | expire | 验证码过期时间(s) | 1800 | | math | 使用算术验证码 | false | | useZh | 使用中文验证码 | false | | zhSet | 中文验证码字符串 | 略 | | useImgBg | 使用背景图片 | false | | fontSize | 验证码字体大小(px) | 25 | | useCurve | 是否画混淆曲线 | true | | useNoise | 是否添加杂点 | true | | imageH | 验证码图片高度,设置为0为自动计算 | 0 | | imageW | 验证码图片宽度,设置为0为自动计算 | 0 | | length | 验证码位数 | 5 | | fontttf | 验证码字体,不设置是随机获取 | 空 | | bg | 背景颜色 | \[243, 251, 254\] | | reset | 验证成功后是否重置 | true | > 配置文件`config/captcha.php` ### 分页功能 模型操作和数据库操作都可以使用`paginate()`方法实现: ~~~php return View::fetch('index',[ 'list' => User::paginate(5) ]); ~~~ ~~~html <table border="1"> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>邮箱</th> <th>价格</th> </tr> {volist name="list" id="user"} <tr> <td>{$user.id}</td> <td>{$user.username}</td> <td>{$user.gender}</td> <td>{$user.email}</td> <td>{$user.price}</td> </tr> {/volist} </table> ~~~ > 上述实现以五条数据显示表格 ~~~html <style> .pagination { list-style: none; margin: 0; padding: 0; } .pagination li { display: inline-block; padding: 20px; } </style> <table border="1"> <tr> <th>编号</th> <th>姓名</th> <th>性别</th> <th>邮箱</th> <th>价格</th> </tr> {volist name="list" id="user"} <tr> <td>{$user.id}</td> <td>{$user.username}</td> <td>{$user.gender}</td> <td>{$user.email}</td> <td>{$user.price}</td> </tr> {/volist} </table> {$list|raw} <ul class="pagination"> ~~~ > 上述实现了分页查询按钮的功能 默认情况下,生成的分页输出是完整分页功能,带总分页数据和上下页码,分页样式只需要通过样式修改即可,完整分页默认生成的分页输出代码为: ~~~html <ul class="pagination"> <li><a href="?page=1">&laquo;</a></li> <li><a href="?page=1">1</a></li> <li class="active"><span>2</span></li> <li class="disabled"><span>&raquo;</span></li> </ul> ~~~ 主要的分页参数如下: | 参数 | 描述 | | --- | --- | | list\_rows | 每页数量 | | page | 当前页 | | path | url路径 | | query | url额外参数 | | fragment | url锚点 | | var\_page | 分页变量 | ## 图像处理功能 不是系统内置功能 ~~~php composer require topthink/think-image ~~~ 创建图像处理对象: ~~~php $image = Image::open('image.png') ~~~ 获取图像处理对象后,可以获得各种属性: ~~~php // 图片宽度 $image->width(); // 图片高度 $image->height(); // 图片类型 $image->type(); // 图片MIME $image->mime(); // 图片大小 $image->size(); ~~~ 裁剪图片:`crop()` ~~~php $image->crop(550,400)->save('crop1.png') ~~~ 使用`thumb()`方法,生成缩略图 ~~~php $image->thumb(500,500)->save('thumb1.png') ~~~ 使用`rotate()`方法:旋转图片默认90度 ~~~php $image->rotate(180)->save('rotate1.png'); ~~~ 使用`water()`方法:给图片添加水印默认位置右下角 ~~~php $image->water('mirror.png')->save('water1.png') ~~~ 使用`text()`方法:给图片添加文字水印 ~~~php $image->text('mirror',getcwd().'/1.ttf',20,'#ffffff') ->save('text1.png'); ~~~