Session
Session
- 在使用Session之前,需要开启初始化,在中间件文件
middleware.php
;
// Session初始化
\think\middleware\SessionInit::class
- TP6.0 不支持原生
$_SESSION
的获取方式,也不支持session_
开头的函数; - 直接使用
::set()
和::get()
方法去设置Session的存取;
Session::set('user', 'Mr.Lee'); //设置 session,参数 1 名称,参数 2 值
Session::get('user'); //读取 session,参数为名称
Session::all(); //读取Session所有内容
Request::session('user'); //读取 session,参数为名称
Request::session(); //读取Session所有内容
::get()
第二参数,可以设置当不存在值的时候,设置一个默认值;
Session::get('name'); //name 不存在时返回 null
Session::get('name', ''); //name 不存在时返回空
::has()
判断是否赋值,::delete()
删除,::pull()
取值后删除;
Session::has('user');
Session::delete('user');
Session::pull('user'); //不存在则返回 null
::clear()
清空整个session;
Session::clear('');
::flash()
方法,设置闪存数据,只请求一次有效的情况,再请求会失效;
Session::flash('user','Mr.Lee');
二维和助手函数
- 二维操作,就是对象和数组的调用方式,如下:
// 赋值(当前作用域)
Session::set('obj.user','Mr.Lee');
// 判断(当前作用域)是否赋值
Session::has('obj.user');
// 取值(当前作用域)
Session::get('obj.user');
// 删除(当前作用域)
Session::delete('obj.user');
- 助手函数,更加方便操作,如下:
//赋值
session('user', 'Mr.Wang');
//has 判断
session('?user');
//delete 删除
session('user', null);
//清理全部
session(null);
//输出
echo session('user');
Cookie
- Cookie是客户端存储,默认情况下是开启初始化的,在
config/cookie.php
; ::set()
方法,创建一个最基本的cookie
,可以设置前缀,过期时间,数组等;
Cookie::set('user', 'Mr.Lee'); //临时保存,关闭浏览器消失
Cookie::set('user', 'Mr.Lee', 3600); //3600 秒
Request::cookie('user');
Request::cookie();
::forever()
方法,永久保存Cookie(就是十年的意思);
Cookie::forever('user', 'Mr.Lee');
::has()
判断是否存在,:get()
取值,::delete()
删除cookie;
Cookie::has('user');
Cookie::get('user');
Cookie::delete('user');
助手函数
- 助手函数,更加方便操作,如下:
echo cookie('user'); //输出
cookie('user', 'Mr.Lee', 3600); //设置
cookie('user', null); //删除
缓存功能
缓存功能
- 系统内置了很多类型的缓存,除了File,其它均需要结合相关产品;
- 我们这里主要演示File文本缓存,其它的需要学习相关产品;
- 配置文件
cache.php
进行缓存配置,默认生成在runtime/cache
目录; - ::set()方法,可以设置一个缓存,参数三为过期时间;
Cache::set('user', 'Mr.Lee');
Cache::set('user', 'Mr.Lee', 3600);
::has()
方法,判断缓存是否存在,返回布尔值;
Cache::has('user');
::get()
方法,从缓存中获取到相应的数据,无数据返回 null;
Cache::get('user');
::inc()
和::dec()
实现缓存数据的自增和自减操作;
Cache::inc('num');
Cache::inc('price', 3);
Cache::dec('num');
Cache::dec('price', 3);
::push()
实现缓存的数组数据追加的功能;
Cache::set('arr', [1,2,3]);
Cache::push('arr', 4);
::delete()
方法,可以删除指定的缓存文件;
Cache::delete('user');
::pull()
方法,先获取缓存值,然后再删除掉这个缓存,无数据返回null
;
Cache::pull('user');
::remember()
方法,如果数据不存在,则写入数据,可以依赖注入;
Cache::remember('start_time', time());
Cache::remember('start_time', function (Request $request) {});
::clear()
方法,可以清除所有缓存;
Cache::clear();
::tag()
标签,可以将多个缓存归类到标签中,方便统一管理,比如清除;
Cache::tag('tag')->set('user', 'Mr.Lee');
Cache::tag('tag')->set('age', 20);
Cache::tag('tag')->clear();
- 助手函数的使用:
cache()
;
//设置缓存
cache('user', 'Mr.Lee', 3600);
//输出缓存
echo cache('user');
//删除指定缓存
cache('user', null);
上传功能
上传功能
- 如果要实现上传功能,首先需要建立一个上传表单,具体如下:
<form action="http://tp6/datatest/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image">
<input type="submit" value="确定">
</form>
- 创建一个控制器,并使用
Request::file
来获取上传数据:
//获取表单的上传数据
$file = Request::file('image');
- 使用
Filesystem::putfile()
方法,来实现上传文件,并写入指定目录; - 上传后返回的结果
$info
,可以输出当前上传文件的地址;
//目录在 runtime/storage/toppic/时间/文件
$info = Filesystem::putFile('topic', $file);
- 如果想更改上传文件的默认配置,在
config/filesystem.php
中配置;
'root' => app()->getRuntimePath() . 'storage',
- 默认规则下,上传的文件是以日期和微秒生成的方式:
date
; - 生成的规则还支持另外两种方式:
md5
和sha1
;
$info = Filesystem::putFile('topic', $file, 'md5');
- 批量上传,使用
image[]
作为名称,并使用foreach()
遍历上传;
<input type="file" name="image[]">
<input type="file" name="image[]">
<input type="file" name="image[]">
$files = Request::file('image');
$info = [];
foreach ($files as $file) {
$info[] = Filesystem::putFile('topic', $file);
}
dump($info);
- 结合之前的验证器,我们写一个针对
upload
的独立验证;
//上传图片文件
$file = Request::file('image');
//编写上传规则,必须是上传文件,必须是 jpg.png.gif 后缀
$validate = Validate::rule([
'image' => 'file|fileExt:jpg,png,gif'
]);
//得到上传文件和规则比对
$result = $validate->check([
'image' => $file
]);
//通过输出地址,否则输出错误
if ($result) {
$info = Filesystem::putFile('topic', $file);
dump($info);
} else {
dump($validate->getError());
}
多语言
多语言
- 如果要开启多语言切换功能,中间件定义文件
middleware.php
开启;
// 多语言加载
\think\middleware\LoadLangPack::class,
- 配置文件在
config/lang.php
文件,默认设置的是zh-cn
中文语言;
'zh-hans-cn' => 'zh-cn',
'detect_var' => 'lang', //自动监测的变量为 lang
- 默认应用目录会调用
app\lang
目录下的语言包,我们创建三个;
//错误信息,zh-cn.php
return [
'require_name' => '用户名不得为空!',
'email_error' => '邮箱地址不正确!',
];
//error message,en-us.php
return [
'require_name' => 'The user name cannot be empty!',
'email_error' => 'Incorrect email address!',
];
//エラーメッセージ, ja-jp.php
return [
'require_name' => 'ユーザ名は空ではいけません!',
'email_error' => 'メールアドレスが間違っています!',
];
- 系统默认会指定:
zh-cn
这个语言包,我们通过::get()
来输出错误信息;
Lang::get('require_name');
lang('require_name'); //助手函数
- 通过URL方式来切换语言,
?lang=en-us
即可,cookie
自动生成;
- 而下一次就算不带
?lang=en-us
,默认就会执行cookie
的语言包; - 也可以在配置文件中,设置允许的语言包,默认为空,具体如下:
// 允许的语言列表
'allow_lang_list' => ['zh-cn','en-us','ja-jp'],
- 在模版中调用语言信息,可以用
{$Think.lang.xxx}
;
{$Think.lang.require_name}
{:lang('email_error')}
- 可以在配置文件中开启多语言分组,运行使用二维数组来实现语言包定义;
// 是否支持语言分组
// config/lang.php
'allow_group' => true,
// zh-cn.php
'user' => [
'welcome' => '欢迎光临!',
'login' => '登入成功!',
'logout' => '退出成功!',
],
Lang::get('user.login');
验证码功能
验证码功能
- 验证码功能不是系统内置的功能了,需要通过
composer
引入进来;
//开启 session 方可使用
composer require topthink/think-captcha
- 引入进来之后,我们在模版中,验证一下验证码是否能正常显示;
<div>{:captcha_img()}</div> //可以点击刷新
<div><img src="{:captcha_src()}" alt="captcha" /></div>
- 创建一个模版页面,设置一个验证码和文本框提交比对;
<form action="../code/check" method="post">
<input type="text" name="code">
<input type="submit" value="验证">
</form>
- 使用
validate
验证器来对验证码进行检测;
//验证码验证规则
$validate = Validate::rule([
'captcha' => 'require|captcha'
]);
//验证码和表单对比
$result = $validate->check([
'captcha' => input('post.code')
]);
if (!$result) {
dump($validate->getError());
}
- 也可以使用助手函数直接进行判断验证;
if(!captcha_check(input('post.code'))){
dump('验证失败');
}
- 验证码的所有配置参数如下,根据需要进行调用:
- 配置文件在
config/captcha.php
中,直接进行参数配置即可;
return [
//字体大小
'fontSize' => 30,
//验证码位数
'length' => 3,
//验证码杂点
'useNoise' => false,
];
- 我们可以自定义一个验证器,创建一个
verify
方法生成;
public function verify()
{
return Captcha::create('verify');
}
// 添加额外的验证码设置
'verify' => [
'length'=>3,
],
// 路由访问验证码
Route::rule('vc', 'Code/verify');
分页功能
分页功能
- 不管是数据库操作还是模型操作,都使用
paginate()
方法来实现;
//查找 user 表所有数据,每页显示 5 条
return View::fetch('index', [
'list' => User::paginate(5)
]);
- 创建一个静态模版页面,并使用
{volist}
标签遍历列表;
<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>
- 分页功能还提供了一个固定方式,实现分页按钮,只需要设置相应的CSS即可;
{$list|raw}
// css
.pagination {
list-style: none;
margin: 0;
padding: 0;
}
.pagination li {
display: inline-block;
padding: 2px;
}
- 我们可以通过数组来传递多个参数,具体分页参数如下:
$list = User::paginate([
'list_rows' => 4,
'var_page' => 'page',
]);
- 也可以单独赋值分页的模版变量;
// 获取分页显示
$page = $list->render();
{$page|raw}
- 也可以单独获取到总记录数量;
$total = $list->total();
- 如果你使用模型方式分页,则可以通过获取器修改字段值,而分页本身也可以;
->each(function ($item, $key) {
$item['gender'] = '【'.$item['gender'].'】';
return $item;
});
- 可以限定总记录数,比如,限定总记录数只有10条的页码;
->paginate(5, 10);
- 也可以设置分页的页码为简洁分页,就是没有1,2,3,4这种,只有上下页;
->paginate(5, true);
最后一次更新于2020-08-06 15:40
0 条评论