thinkphp5基础三

本文详细介绍了ThinkPHP5中视图和模板的使用,包括数据输出到前端、分页显示、模板定位及自定义标签。同时,讲解了调试模式的开启、日志记录的优势和异常捕获。此外,还涵盖了SESSION和COOKIE的配置与操作,以及文件上传的规则和验证方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#一、视图和模板#
###数据用模板的形式到前端输出###
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##

  1. 用户打开浏览器,访问服务器,服务器产生SESSION和COOKIE文件返回COOKIE文件
  2. 用户再次访问服务器,会到COOKIE里面找到SESSION的唯一标识符,去访问服务器中的SESSION文件
  3. COOKIE和SESSION里面存放一些临时数据和一些用户的基本信息;
  4. session文件存放的位置,在php.ini中session.save_path进行修改和了解
  5. 利用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类型,多个逗号分割或者数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值