#一、视图和模板#
###数据用模板的形式到前端输出###
public function test(){
//按条件取出数据
$list = User::where(‘user_id’,’>’,2)->select();
this−>assign(′list′,this->assign('list',this−>assign(′list′,list);//放入模板中
this−>assign(′count′,count(this->assign('count',count(this−>assign(′count′,count(list));//统计数据的数量,放入模板中
return $this->fetch();调入模板
}
###分页输出###
publi funtion test(){
$list = User::paginate(3);//每页显示3条数据
this−>assign(′list′,this->assign('list',this−>assign(′list′,list);//放入模板中
this−>assign(′count′,count(this->assign('count',count(this−>assign(′count′,count(list));//统计数据的数量,放入模板中
return $this->fetch();调入模板
}
在html中
{volist name='list' id='user'}
<div>
I D:{$user.user_id}
姓名:{$user.nickname}
</div>
{/volist}
{$list->reder()}//分页使用
###模板定位###
是可以把一张网页分成几个部分来进行封装,使用调用的形式来进行使用,如:
{include file='头文件路径'}
..............
中间文件内容
..............
{include file='尾文件路径'}
还有一种在要在配置中修改
//'layout_on' => true,//开启模板布局
//'layot_naem' => 'layout',//使用layout文件
//'layout_item' => '{__CONTENT__}',
在view目录下创建一个layout.html文件
{include file=‘头文件路径’}
{CONTENT}
{include file=‘尾文件路径’}
在视图文件里
{layout name='layout' /}
中间文件内容
如果有的视图不需要模板可以使用
{__NOLAYOUT__}进行关闭
###模板中的输出代替###
在控制器中
$this->view->replace([‘PUBLIC’=>’/static’,]);
###视图中标签的定制###
在config文件里面进行修改
#二、调试和日志#
在thinkphp5中有为开发设置的调试模式,开启调试模式后,执行的效率会受到一定的影响;
在config配置文件里修改
'app_debug' => false//关闭
//默认是打开的
###调试模式的优势在于###
- 开启日志记录,任何错误信息和调试信息都会详细记录,便于调试;
- 会详细记录整个执行过程;
- 模板修改可以即时生效;
- 记录SQL日志,方便分析SQL;
- 通过Trace功能更好的调试和发现错误;
- 发生异常的时候会显示详细的异常信息;
在关闭调试模型后,发生错误一般不会给提示信息的,但是如果还要提示信息就可以打开show_error_msg
'show_error_msg' =>true
##异常捕获##
可以使用PHP的异常捕获进行必要的处理,但需要注意一点,
在异常捕获中不要使用think\Controller类的error、success和redirect方法,
因为上述三个方法会抛出HttpResponseException异常,从而影响正常的异常捕获
例如:
try{
Db::name('user')->find();
$this->success('执行成功!');//这是不行的,会抛出HttpResponseException异常
}catch(\Exception $e){
$this->error('执行错误');
}
应该改为
try{
Db::name('user')->find();
}catch(\Exception $e){
$this->error('执行错误');
}
$this->success('执行成功!');
##Trace##
这是thinkphp提供的调试手段
Trace调试功能对调试模式和部署模式都有效,可以单独开启和关闭。
// 开启应用Trace调试
'app_trace' => true,//默认是关闭的
开启页面的Trace显示
// Trace信息
'trace' => [
//支持Html,Console
'type' => 'html',
]
如果页面有输出,页面下就会出现thinkphp的LOGO
trace的选项卡里还支持定制和扩展,具体请查看thinkphp手册
##API##
例如:
$user = User::get($id);
if($user){
return json(array(
'status' => 1,//这里的状态最好不要跟一些系统状态设为一样,容易出现混乱
'msg' => '查询成功',
'data' => $user,
));
} else{
return json(array(
'status' => -1,//这里的状态最好不要跟一些系统状态设为一样,容易出现混乱
'msg' => '查询失败',
'data' => ’ ‘,
));
}
//这个我还没有做实际操作,也有些不太清楚,在调试这个知识点,还是在开发中来自己琢磨,看习惯使用那种方式
#三、COOKIE和SESSION#
##1、回忆SESSION和COOKIE##
- 用户打开浏览器,访问服务器,服务器产生SESSION和COOKIE文件返回COOKIE文件
- 用户再次访问服务器,会到COOKIE里面找到SESSION的唯一标识符,去访问服务器中的SESSION文件
- COOKIE和SESSION里面存放一些临时数据和一些用户的基本信息;
- session文件存放的位置,在php.ini中session.save_path进行修改和了解
- 利用seesion_star进行开启session
##2、在thinkphp5中##
SESSION配置在application\config.php中
'session' => [
'id' => '',
// SESSION_ID的提交变量,解决flash上传跨域
'var_session_id' => '',
// SESSION 前缀
'prefix' => 'think',
// 驱动方式 支持redis memcache memcached
'type' => '',
// 是否自动开启 SESSION
'auto_start' => true,
],
//上述配置中对SESSION前缀时什么不太了解吧
SESSION前缀就是SESSION种的一个数组,它相当于把SESSION分成很多快,又叫他们为域,如:
SESSION => [
'think'=>[这个域的数据],
'think1'=>[这个域的数据],
]//这就是分为两个域的,
设置还包括
参数 描述
type session类型
expire session过期时间
prefix session前缀
auto_start 是否自动开启
use_trans_sid 是否使用use_trans_sid
var_session_id 请求session_id变量名
id session_id
name session_name
path session保存路径
domain session cookie_domain
use_cookies 是否使用cookie
cache_limiter session_cache_limiter
cache_expire session_cache_expire
###对SESSION进行操作###
在使用thinkphp5种SESSION要添加命名空间
use think\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::prefix('think');
取值并删除
// 取值并删除
Session::pull('name')
清空当前作用域
// 清除session(当前作用域)
Session::clear();
// 清除think作用域
Session::clear('think');
二级数组
// 赋值(当前作用域)
Session::set('name.item','thinkphp');
// 判断(当前作用域)是否赋值
Session::has('name.item');
// 取值(当前作用域)
Session::get('name.item');
// 删除(当前作用域)
Session::delete('name.item');
###SESSION的函数助手###
初始化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’ =>[
// cookie 名称前缀
‘prefix’ => ‘’,
// cookie 保存时间
‘expire’ => 0,
// cookie 保存路径
‘path’ => ‘/’,
// cookie 有效域名
‘domain’ => ‘’,
// cookie 启用安全传输
‘secure’ => false,
// httponly设置
‘httponly’ => ‘’,
// 是否使用 setcookie
‘setcookie’ => true,
],
###cookie的操作###
使用cookie也要添加命名空间
use think\Cookie;
设置
// 设置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');
// 删除指定前缀的cookieCookie::delete('name','think_');
清空
清空指定前缀的cookieCookie::clear('think_');
###cookie的函数助手###
// 初始化
cookie(['prefix' => 'think_', 'expire' => 3600]);
// 设置
cookie('name', 'value', 3600);
// 获取
echo cookie('name');
// 删除
cookie('name', null);
// 清除
cookie(null, 'think_');
##四、文件上传##
###1、在视图文件中###
要注意enctype=“multipart/form-data” method必须要是post type=file
<form action="/index/index/upload" enctype="multipart/form-data" method="post">
<input type="file" name="image" /> <br>
<input type="submit" value="上传" />
</form>
###2、在控制器中###
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();
}
}
}
上传规则
可以使用MD5和rule方法
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('image');
// 移动到服务器的上传目录 并且使用md5规则
$file->rule('md5')->move('/home/www/upload/');
生成文件
/home/www/upload/72/ef580909368d824e899f77c7c98388.jpg
还有几种系统默认规则
- date:根据日期和微妙生成
- MD5:对文件使用md5_file散列生成
- sha1:对文件使用sha1_file散列生成
还可以进行上传验证
要添加命名空间use think\Validate;
$info = $file->validate(['size'=>15678,'ext'=>'jpg,png,gif'])
->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();
}
验证规则
- size:上传文件的最大字节
- ext:文件后缀,多个使用逗号或者数组
- type:文件MIME类型,多个逗号分割或者数组