PHP_thinkPHP框架(1)

article/2025/9/27 23:14:39

能够理解并使用composer

PHP一个包管工具 解决源码包 依赖问题
​
1.7.3 软件升级
composer self-update

能够安装Thinkphp5.1框架

composer create-project --prefer-dist topthink/think=[版本号] 目录名称
​
安装之前一定要切换国内源,否则成功的概率很小。

能够说出Thinkphp5.1重要目录作用

application 应用目录  mvc 所在的目录,业务代码所写的目录
application/common  公共模块目录
application/common/model 公共模块中的模型
config/app.php  应用的主配置文件
route/route.php 路由文件
public 虚拟主机指向的目录  public/static 静态文件所在的目录 可以删除
thinkphp 框架核心目录,不要修改 
vendor composer 下载的第三方类库 composer管理的
composer.json 文件 composer针对于此项目的配置文件
think  命令行文件 php think

能够理解Thinkphp5.1框架中请求的生命周期(执行流程)

用户请求->入口文件index.php->框架引入文件中->框架实现层(引导加载【容器:说白话,数组】,URL检测,路由的分配)->控制器->模型->控制器->视图->返回用户
路由与控制器之间,我们可以加事件 【中间件】

能够理解并使用路由注册功能

url更加友好,美化,安全
​
Route::get  post put delete   any不推荐
​
分组 Route::group(''|[],function(){})
​
路由参数 ['name','prefix','middleware']    :name [:name]

能够在Thinkphp5框架中定义控制器

能够使用命令行创建分组和控制器

php think run 命令行启动服务   [选记]
​
php think build --module 分组名   [选记]
​
php think make:controller --plain 控制器名称(首字母大写)
​
php think route:list   查看已定义的路由列表

============================ 

  • 能够理解参数绑定和依赖注入
public function fun1(Request $request,int $id)

  • 能够理解Request请求类的基本使用
$request 依赖注入过来的request类门面 Request函数 input 字符串  ?get put delete post param  has only except

  • 能够返回json格式数据
return json($data,http状态码,[头信息]);

  • 能够进行模板的渲染
return view();如果是patinfo可以不写,默认就是方法名就是模板名称自定义路由return view(模块@控制器/方法)赋值return view(‘’,compact(‘变量名不要$’));

  • 能够在模板中进行变量输出
默认 标记符号为  {}  变量 {$变量}可以用函数 {:函数名(变量)}

  • 能够在模板中使用foreach等内置标签
{foreach $data as $val}{/foreach}{volist id=”val” name=”data”}{/volist}

  • 能够配置数据库信息
config/database.php

  • 能够定义TP5框架中的模型
php think make:model 【模块名】/模型名  模型名为表名相当

  • 能够熟练使用数据查询方法
findselectfindOrFailselectOrFailwhere

  • 能够完成数据的添加操作
create静态方法

  • 能够完成烽据的修改操作
update 静态方法Articles::where()->update()

  • 能够完成数据的删除操作
deletedestroy  静态方法

  • 能够理解trait并实现软删除功能
trait 解决多继承  php5.4数据表中添加一个标识位

一、请求

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息。在Thinkphp5.1中,获取请求对象数据,是由think\Request类负责,在很多场合下并不需要实例化调用,通常使用依赖注入即可,在其它场合(例如模板输出等)则可以使用think\facade\Request静态类操作。

Request::param('name');$request->param('name');

1.1、变量获取

变量类型方法('变量名/变量修饰符','默认值','过滤方法')

路由

控制器

门面的方式

依赖注入方式获取【推荐】

辅助函数【推荐】

1.2、参数绑定

参数绑定是把当前请求的路由参数作为操作方法的参数直接传入,参数绑定并不区分请求类型。

1.3、依赖注入

依赖注入是一种软件设计思想,在传统软件中,上层代码依赖于下层代码,当下层代码有所改动时,上层代码也要相应进行改动,因此维护成本较高。而依赖注入原则的思想是,上层不应该依赖下层,应依赖接口。意为上层代码定义接口,下层代码实现该接口,从而使得下层依赖于上层接口,降低耦合度,提高系统弹性。

控制反转【IOC】

依赖注入【DI】

二、响应

2.1、输出响应

return 'PHP是世界上最好的语言';

2.2、json数据返回

由于默认是输出Html输出,所以直接以html页面方式输出响应内容,但也可以设置默认输出为json格式 config/app.php

'default_return_type'    => 'json',

返回json数据

return json($data,http状态码);return json($data)->code(201)->header(['Content-Type' => 'application/json']);

2.3、重定向

可以使用redirect助手函数进行重定向

redirect('地址或方法名',数组参数);

三、视图

3.1、视图的组成

此处所说的视图就是MVC中所说的V层,视图层也要展示层。thinkphp中视图层是由HTML模板文件组成的。

3.2、模板的定义

为了对模板文件更加有效的管理,ThinkPHP对模板文件进行目录划分,默认的模板文件定义规则是:视图目录(view)/控制器名(小写)/方法名(小写)+ 模板后缀(框架的默认视图文件后缀是.html)

3.3、模板渲染和赋值

控制器中指定渲染的模板文件

在控制器中使用方法一:return $this->fetch('[模板文件]'[,'模板变量(数组)']);方法二:return view('[模板文件]'[,'模板变量(数组)']);  # 辅助函数# 针对于自定义路由return view('index@index/index');模板赋值方法一:了解$this->assign('name','ThinkPHP');方法二:推荐写法以关联数组的方式在渲染模板方法第二个参数填写return view('index@index/index',compact('aa','arr')); # 推荐写法全局赋值use think\facade\View;# 赋值全局模板变量View::share('name','value');# 或者批量赋值View::share(['name1'=>'value','name2'=>'value2']);

s

全局赋值

总结:

渲染  view  函数

赋值  局部  compact()   全局 think\facade\View::share();

3.4、使用函数

需要对模板输出使用函数进行过滤或其它处理的时候,就可以使用一下函数来解决。

{$password|md5}当然也可以写成如下的写法,推荐{:md5($password)}

注:不但用php系统提供函数,还可以用tp提供的函数,还可以用户在tp规定的文件中定义的写的函数

3.5、原样输出

因thinkphp5的标签语法和js的一致,所以有的时候,可能会使用到它。

{literal}Hello,{$name}!{/literal}

上面的{$name}标签被literal标签包含,因此并不会被模板引擎解析,而是保持原样输出。

3.6、循环标签【重点】

# foreach 【推荐写法】{foreach $list as $key=>$vo }{$vo.id}:{$vo.name}{/foreach}# volist{volist name="list" id="vo"}{$vo.id}:{$vo.name}<br/>{/volist}

效果

3.7、条件判断

{if ( $name == 1) OR ( $name > 100) } value1{elseif $name == 2 /} value2{else /} value3{/if}

3.8、模板继承

模板继承其实并不难理解,就好比类的继承一样,模板也可以定义一个基础模板(或者是布局),并且其中定义相关的区块(block),然后继承(extend)该基础模板的子模板中就可以对基础模板中定义的区块进行重载。

定义一个基础模板

在子模板(其实是当前操作的入口模板)中使用继承

四、数据库操作

4.1、连接数据库

在应用配置目录或者模块配置目录下面的config/database.php中配置下面的数据库参数

注:配置好的,一定要检查mysql服务是否开启,同时也要检查pdo是否打开。

同时还是创建好对应的数据库和连接数据库的用户名和密码并确保他们可以连接上你们的mysql服务器。

4.2、执行原生sql语句

Db类支持原生SQL查询操作

# 查询Db::query("select * from think_user where id=? AND status=?", [8, 1]);# 添加、更新与删除Db::execute("update think_user set name=:name where status=:status", ['name' => 'thinkphp', 'status' => 1]);

4.3、添加数据Db

# 添加一条数据$data = ['foo' => 'bar', 'bar' => 'foo'];Db::name('user')->insert($data);Db::name('user')->data($data)->insert();db('user')->data($data)->insert();# 添加数据后如果需要返回新增数据的自增主键$userId = Db::name('user')->insertGetId($data);# 添加多条数据$data = [['foo' => 'bar', 'bar' => 'foo'],['foo' => 'bar1', 'bar' => 'foo1'],['foo' => 'bar2', 'bar' => 'foo2']];Db::name('user')->insertAll($data);db('user')->insertAll($data);Db::name('user')->data($data)->insertAll();

添加一条

添加多条

4.4、更新数据

更新数据一定要写条件

db('user')->where('id', 1)->update(['name' => 'thinkphp']);db('user')->where('id', 1)->data(['name' => 'thinkphp'])->update();Db::name('user')->update(['name' => 'thinkphp','id'=>1]);# 5.1.7之后还支持了Db::raw写法Db::name('user')->where('id', 1)->update(['name'     =>  Db::raw('UPPER(name)'),'score'    =>  Db::raw('score-3'),'read_time'   =>  Db::raw('read_time+1')]);

4.5、删除数据

# 根据主键删除Db::table('think_user')->delete(1);Db::table('think_user')->delete([1,2,3]);# 条件删除   Db::table('think_user')->where('id',1)->delete();Db::table('think_user')->where('id','<',10)->delete();# 无条件删除所有数据  小心去用Db::name('user')->delete(true);# 软删除数据 使用delete_time字段标记删除   逻辑删除# 软删除,必须要表中要delete_time字段Db::name('user')->where('id', 1)->useSoftDelete('delete_time',time())->delete();

4.6、查询数据

# 查询一条数据db('user')->find(主键ID);Db::name('user')->where('id',1)->find();# 如果希望在没有找到数据后抛出异常可以使用Db::name('user')->where('id',1)->findOrFail();# 查询多条记录Db::name('user')->where('status',1)->select();# 如果希望在没有找到数据后抛出异常可以使用Db::name('user')->where('status',1)->selectOrFail();# 查询某个字段的值可以用Db::name('user')->where('id',1)->value('name');# 查询某一列的值可以用Db::name('user')->where('id',1)->column('name');# 排序并获取指定记录条数Db::name('user')->order('id', 'desc')->limit(0,10)->select();# 聚合查询Db::name('user')->count();Db::name('user')->max('score');Db::name('user')->where('score', '>', 0)->min('score');Db::name('user')->avg('score');Db::name('user')->where('id',10)->sum('score');# 批量(字段)查询$map = [['name', 'like', 'thinkphp%'],['title', 'like', '%thinkphp'],['id', '>', 0],];Db::table('think_user')->where([ $map ])->where('status',1)->select();SELECT * FROM `think_user` WHERE ( `name` LIKE 'thinkphp%' AND `title` LIKE '%thinkphp' AND `id` > 0 ) AND `status` = '1'# 闭包查询$name = 'thinkphp';$id = 10;Db::table('think_user')->where(function ($query) use($name, $id) {$query->where('name', $name)->whereOr('id', '>', $id);})->select();SELECT * FROM `think_user` WHERE ( `name` = 'thinkphp' OR `id` > 10 )# 获取器 5.1.20之后才有Db::name('user')->withAttr('name', function($value, $data) {return strtolower($value);})->select();上面的代码,查询的数据集数据中的name字段的值会统一进行小写转换

效果

五、模型操作

5.1、模型定义与模型设置

php think make:model 模块名/模型名(首字母大写)# 非必须protected $pk = 'uid'; # 设置主键名称protected $table = 'think_user'; #设置当前模型对应的完整数据表名称

5.2、添加数据

# 添加一条数据# 方法1$user           = new User;$user->name     = 'thinkphp';$user->email    = 'thinkphp@qq.com';$user->save();# 方法2$user = new User;$user->save(['name'  =>  'thinkphp','email' =>  'thinkphp@qq.com']);// 过滤post数组中的非数据表字段数据$user->allowField(true)->save($_POST);$user->allowField([要插入的字段,要插入的字段])->save($_POST);# 方法3$user = User::create(['name'  =>  'thinkphp','email' =>  'thinkphp@qq.com']);echo $user->name;# 添加多条记录$user = new User;$list = [['name'=>'thinkphp','email'=>'thinkphp@qq.com'],['name'=>'onethink','email'=>'onethink@qq.com']];$user->saveAll($list);

5.3、更新数据

# 方法1$user = User::get(1);  find$user->name     = 'thinkphp';$user->email    = 'thinkphp@qq.com';$user->save();# 方法2$user = new User;// save方法第二个参数为更新条件$user->save(['name'  => 'thinkphp','email' => 'thinkphp@qq.com'],['id' => 1]);$user = new User;// 过滤post数组中的非数据表字段数据$user->allowField(true)->save($_POST,['id' => 1]);# 方法3User::where('id', 1)->update(['name' => 'thinkphp']);

5.4、删除数据

# 方法1$user = User::get(1);$user->delete();# 方法2User::destroy(1);User::destroy([1,2,3]);

5.5、软删除

在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。

5.6、查询数据

# 查询单条记录$user = User::where('name', 'thinkphp')->find();# 查询多条记录$list = User::where('status', 1)->limit(3)->order('id', 'asc')->select();# 获取某个字段或者某个列的值// 获取某个用户的积分User::where('id',10)->value('score');// 获取某个列的所有值User::where('status',1)->column('name');# 动态查询// 根据name字段查询用户$user = User::getByName('thinkphp');

http://chatgpt.dhexx.cn/article/37P1EULS.shtml

相关文章

使用ThinkPHP框架快速开发网站(多图)

使用ThinkPHP框架快速搭建网站 这一周一直忙于做实验室的网站&#xff0c;基本功能算是完成了。比较有收获的是大概了解了ThinkPHP框架。写一些东西留作纪念吧。如果对于同样是Web方面新手的你有一丝丝帮助&#xff0c;那就更好了挖。 以前用PHP做过一个很蹩脚的网站&#xff0…

ThinkPHP框架完全解析一

第一步&#xff1a;搭建应用和框架目录 文件系统结构如上图所示&#xff0c;新建一个名为tp_an的目录作为我们的应用目录。其中&#xff0c;ThinkPHP这个目录&#xff0c;就是thinkphp框架的目录。所有涉及到框架的开发&#xff0c;都会在ThinkPHP中进行。只是为了方便测试&…

Thinkphp框架初始及安装部署

一、框架概述 1、什么是框架 框架就是一些代码类、方法&#xff08;函数&#xff09;、变量、常量的集合&#xff0c;这些代码是功能结构性的代码&#xff08;并非业务代码&#xff09;。业务代码其实就是具体的一些模块的增删改查逻辑代码。 使用框架开发项目&#xff0c;有…

认识thinkphp框架

https://www.thinkphp.cn/down.html 版本5.0.24 ThinkPHP是一个免费开源的&#xff0c;快速、简单的面向对象的轻量级PHP开发框架 tp5 WEB部署目录&#xff08;或者子目录&#xff09; ├─application 应用目录 │ ├─common 公共模块目录&#xff08;可以更改&#xff09; …

【Java教程系列】IDEA快捷键大全。

自动代码 常用的有fori/sout/psvmTab即可生成循环、System.out、main方法等boilerplate样板代码 。 例如要输入for(User user : users)只需输入user.forTab &#xff1b; 再比如&#xff0c;要输入Date birthday user.getBirthday()只需输入user.getBirthday().varTab即可。…

IDEA快捷键大全(超详细!)

4.1、字体设置 file --> settings --> 输入font --> 设置字体样式以及字号大小。 4.2、快速生成main方法 psvm、main 4.3、快速生成System.out.println() sout 4.4、注意&#xff1a;IDEA是自动保存&#xff0c;不需要ctrl s 4.5、删除一行 ctrl y 4.6、怎…

IDEA的实用快捷键大全

目录 1.常规快捷键 1.1通用类 1.2注释类 1.3操作类 1.4展开与关闭 2.智能补全类快捷键 3.程序结构类快捷键 4.统一操作快捷键 1.常规快捷键 1.1通用类 像 Ctrl C 复制&#xff0c; Ctrl V 粘贴&#xff0c; Ctrl S保存文件&#xff0c; Ctrl X剪切&#xff0c;这种…

IDEA快捷键大全 + 动图演示

目录 一、构建/编译二、文本编辑三、光标操作四、文本选择五、代码折叠六、多个插入符号和范围选择七、辅助编码八、上下文导航九、查找操作十、符号导航十一、代码分析十二、运行和调试十三、代码重构十四、全局 CVS 操作十五、差异查看器十六、工具窗口 一、构建/编译 Ctrl …

Idea快捷键大全(Windows)/Intellij IDEA常用快捷键介绍 Intellij IDEA快捷键大全汇总

Ctrl 快捷键 介绍 Ctrl F 在当前文件进行文本查找 &#xff08;必备&#xff09; Ctrl R 在当前文件进行文本替换 &#xff08;必备&#xff09; Ctrl Z 撤销 &#xff08;必备&#xff09; Ctrl Y 删除光标所在行 或 删除选中的行 &#xff08;必备&#x…

python 相关性检验怎么计算p值_挖掘数据内部联系:相关性分析

相关性表示的是两个观测的数据向量之间的变化关系。一般来讲研究对象(样品或处理组)之间使用距离分析,而元素(物种或环境因子)之间进行相关性分析。两个变量之间的相关性可以用简单相关系数(例如皮尔森相关系数等)进行表示,相关系数越接近1,两个元素相关性越大,相关系数越接…

python 相关性检验怎么计算p值_数据分析---用Python进行相关性分析(兼谈假设检验)...

一、相关关系和相关系数 世上除了因果关系,还有相关关系。 有一个叫“相关系数”的指标来量化两个事物之间的相关程度。 其中相关系数用“r”表示,取值范围介于-1和1之间。 当(X,Y)正相关的时候,r=1;当(X,Y)负相关的时候,r=-1;当(X,Y)不相关的时候,r=0。 当然一般的线性…

python 相关性检验怎么计算p值_机器学习:数据的准备和探索——数据假设检验...

图 | 源网络 文 | 5号程序员 数据假设检验是数理统计学中根据一定假设条件由样本推断总体的一种方法。 那我们啥时候会用到假设检验呢? 大多数情况下,我们无法分辨事物的真伪或者某种说法是否正确,这时就需要进行假设,然后对我们的假设进行检验。 比如,我们想知道被告人是…

R语言笔记十一:相关性分析函数及相关性检验函数

1.相关性分析 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度。相关性的元素之间需要存在一定的联系或者概率才可以进行相关性分析。简单来说就是变量之间是否有关系。 相关性可能是正相关&#xff0c;…

数据特征分析之 python相关性检验(转载学习)

数据特征分析技能—— 相关性检验 相关性分析是指对两个或多个具备相关性的变量元素进行分析&#xff0c;从而衡量两个变量因素的相关密切程度 一般常用四种方法&#xff1a; - 画图判断 - pearson&#xff08;皮尔逊&#xff09;相关系数 - sperman&#xff08;斯皮尔曼&a…

相关性检验(二维列联表相关 协方差 Pearson相关 Spearman相关 相关性检验 相关可视化)

文章目录 相关二维列联表相关协方差Pearson相关Spearman相关相关性检验相关可视化 相关 二维列联表相关 data <- xtabs(~TreatmentImproved, data Arthritis) ## 生成二维列联表assocstats(data)协方差 states <- state.x77[,1:6] cov(states)Pearson相关 cor(state…

python实现Kendall相关性检验

python实现Kendall相关性检验 肯德尔相关性系数,又称肯德尔秩相关系数,它也是一种秩相关系数,不过它所计算的对象是分类变量。 分类变量可以理解成有类别的变量,可以分为 无序的,比如性别(男、女)、血型(A、B、O、AB); 有序的,比如肥胖等级(重度肥胖,中度肥…

R语言:相关性分析检验

相关性分析 相关性分析的检验衡量指标包括&#xff1a;Pearson相关系数、Spearman相关系数、Kendall相关系数、偏相关系数、多分格相关系数、多系列相关系数 默认使用Pearson相关系数 cor(data) #或者 cor(x,y,method c(“pearson”, “kendall”, “spearman”)) #x,y可以是…

python实现spearman相关性检验

python实现spearman相关性检验 Spearman秩相关系数 对原始变量的分布不做要求,适用范围较Pearson相关系数广,即使是等级资料,也可适用。但其属于非参数方法,检验效能较Pearson系数低。(适合含有等级变量或者全部是等级变量的相关性分析) 测试两个样本是否具有单调关系。…

多元数据的相关性检验——基于R

多元数据的相关性检验 检验方法&#xff1a;1.Pearson相关检验2.Spearman相关检验3.Kendall相关检验 cor.test函数案例分析&#xff1a; 对于多元数据&#xff0c;讨论变量间是否具有相关关系是很重要的&#xff0c;这里介绍三种相关检验—— Pearson相关检验&#xff0c;Spear…

时间序列之间的相关性检测

为了检测时间序列的相关性&#xff0c;我们经常使用自相关&#xff0c;互相关或归一化互相关。 互相关&#xff08;Cross-Correlation&#xff09; 互相关是两个不同时间序列的比较&#xff0c;以检测具有相同最大值和最小值的指标之间是否存在相关性。例如&#xff1a;“两个…