Blogger Information
Blog 128
fans 9
comment 5
visits 241145
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
【ThinkPHP框架】tp6.0框架安装、控制器、视图、配置文件、数据库等操作详解
 一纸荒凉* Armani
Original
5943 people have browsed it

一、ThinkPHP6 安装

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化 企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的 同时,更注重易用性。

  • 6.0 版本开始,必须通过 Composer 方式安装和更新,所以你无法通过 Git 下载安装。
  • PHP运行环境需要 >= 7.1.0

1.安装 Composer

  • 下载并运行(Window 环境) Composer-Setup.exe

  • 安装步骤如下:

    • 第一步:双击下载好的composer运行程序

      tp

    • 第二步:点击下一步

      tp

    • 第三步:选择要安装的盘符

      tp

    • 第四步:选择php版本。如果你是集成包环境,就到集成包里找php

      tp

    • 第五步:全部下一步

      tp

    • 第六步:

      tp

    • 第七步:

      tp

2.设置 Composer 下载源

先设置 Composer的下载源,也是镜像地址

在命令行窗口或控制台 输入

composer config -g repo.packagist composer https://packagist.phpcomposer.com

国外的网站速度慢,官网建议使用国内镜像(阿里云)

composer config -g repo.packagist composer https://mirrors.aliyun.com/composer

3.安装 Thinkphp6

  • 先切换到你的 php 环境根目录www
  1. d:
  2. cd phpstudy_pro/WWW
  • 在执行下载Thinkphp6命令(tp6 为下载Thinkphp6的目录)
  • 最后的tp6,是新建个tp6目录,可更改为项目名称

composer create-project topthink/think tp6

tp

安装出现错误:查看composer目前安装环境(主要是查看下载源,然后恢复官方源)

  1. composer config -g -l repo.packagist
  2. composer config -g --unset repos.packagist

更新Thinkphp6核心

composer update topthink/framework

备:安装和更新命令所在的目录是不同的,更新必须在你的应用根目录下面执行

4、配置、运行 Thinkphp6

第一步:打开 phpstudy 集成软件 -> 站点域名管理
第二步:网站域名:www.zhang.com
第三步:网站目录:tp6/public
第四步:直接在浏览器上输入域名: www.zhang.com

注:如果无法打开站点,在 C:\Windows\System32\drivers\etc 目录下,打开 hosts文件

最后一行输入 127.0.0.1 www.zhang.com

5、目录结构

  • 6.0版本目录结构的主要变化是核心框架纳入vendor目录,然后原来的application目录变成app目录。
  • 安装后的目录结构就是一个单应用模式
  • 在 mac 或者 linux 环境下面,注意需要设置 runtime 目录权限为777
  1. ├─app 应用目录
  2. ├─controller 控制器目录
  3. ├─model 模型目录
  4. ├─view 视图目录
  5. ├─ ... 更多类库目录
  6. ├─AppService.php 应用服务类
  7. ├─BaseController.php 默认基础控制器类
  8. ├─common.php 全局公共函数文件
  9. ├─event.php 全局事件定义文件
  10. ├─ExceptionHandle.php 应用异常定义文件
  11. ├─middleware.php 全局中间件定义文件
  12. ├─provider.php 服务提供定义文件
  13. ├─Request.php 应用请求对象
  14. └─service.php 系统服务定义文件
  15. ├─config 配置目录
  16. ├─app.php 应用配置
  17. ├─cache.php 缓存配置
  18. ├─console.php 控制台配置
  19. ├─cookie.php Cookie配置
  20. ├─database.php 数据库配置
  21. ├─filesystem.php 文件磁盘配置
  22. ├─lang.php 多语言配置
  23. ├─log.php 日志配置
  24. ├─middleware.php 中间件配置
  25. ├─route.php URL和路由配置
  26. ├─session.php Session配置
  27. ├─trace.php Trace配置
  28. └─view.php 视图配置
  29. ├─extend 扩展类库目录
  30. ├─public WEB目录(对外访问目录)
  31. ├─index.php 入口文件
  32. ├─router.php 快速测试文件
  33. └─.htaccess 用于apache的重写
  34. ├─route 路由定义目录
  35. ├─route.php 路由定义文件
  36. └─ ...
  37. ├─runtime 应用的运行时目录(可写,可定制)
  38. ├─vendor Composer类库目录
  39. ├─view 视图目录
  40. ├─.example.env 环境变量示例文件
  41. ├─composer.json composer 定义文件
  42. ├─LICENSE.txt 授权说明文件
  43. ├─README.md README 文件
  44. ├─think 命令行入口文件

二、框架介绍

ThinkPHP是一个免费开源的,快速、简单的面向对象的轻量级PHP开发框架,是为了敏捷WEB应用开发和简化 企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简代码的 同时,更注重易用性。

1、MVC

支持传统的 MVC(Model-View-Controller)模式

  • M:Model 模型,专门负责数据操作,针对数据库部分的代码。一个模型(类)针对一张数据表
  • V:View 视图,专门负责结果数据渲染(HTML+CSS+Javascript)。
  • C:Controller 控制器,负责所有的业务处理。一个控制器控制(类)一类业务。

mvc

2、入口文件

  • ThinkPHP6.0 采用单一入口模式进行项目部署和访问,一个应用都有一个统一(但不一定是唯一)的入口。入口文件位于 public 目录下面,最常见的入口文件就是 index.phpThinkphp6 支持多应用多入口
  1. 静态资源存放在主文件目录下public/static文件中即可
  2. 任何页面的js和css文件路径配置从public文件下开始配置即可

3、完整 url

访问地址:http://www.zhang.com/index.php/index/index

  • index.php 入口文件,是根目录下 public/下的 index.php
  • index 控制器,目录下有一个 controller 控制器目录的 Index.php
  • index 操作,Index.php控制器下的操作方法,操作方法是一个 URL 访问的最小单元。

gjxqwq.png
gjxLT0.png

注意:官方的实例Index\index.php控制器中的hello方法就不能以这种方式访问,因为该控制器方法在路由中进行了设置,需要通过http://www.zhang.com/hello/zhang进行访问,

http://www.zhang.com/Index/hello是无法访问到的。

路由 route/app.php

  1. Route::get('think', function () {
  2. return 'hello,ThinkPHP6!';
  3. });
  4. Route::get('hello/:name', 'index/hello');
  5. /* 访问地址
  6. http://zhang.com/think
  7. http://zhang.com/hello/zhang
  8. */

5、Apache 隐藏入口文件

1.一般访问项目:入口文件+应用名+控制器+函数即可访问到,后面可以根一些get访问参数

2.为了访问方便一般会隐藏入口文件,在主文件目录下public文件下找到.htaccess配置隐藏入口文件

  • httpd.conf 配置文件中加载了 mod_rewrite.so 模块
  • AllowOverride None 将 None 改为 All
  • 把下面的内容保存为 .htaccess 文件放到应用入口文件的同级目录下
  1. <IfModule mod_rewrite.c>
  2. Options +FollowSymlinks -Multiviews
  3. RewriteEngine On
  4. RewriteCond %{REQUEST_FILENAME} !-d
  5. RewriteCond %{REQUEST_FILENAME} !-f
  6. RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
  7. # RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
  8. # RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
  9. </IfModule>

6、Nginx 隐藏入口文件

    1. 把下面的内容保存为 nginx.htaccess 文件放到应用入口文件的同级目录下
  1. location / {
  2. if (!-e $request_filename) {
  3. rewrite ^(.*)$ /index.php?s=/$1 last;
  4. }
  5. }

三、控制器

  • 控制器文件通常放在 controller 下面,类名和文件名保持大小写一致,并采用驼峰命名(首字母大写)

1、命名空间

  1. // 命名空间一般和文件夹路径一致,类名称和文件名称一致
  2. namespace app\controller;

2、继承基础控制器

  1. namespace app\controller;
  2. use app\BaseController;
  3. class Index extends BaseController
  4. {
  5. public function index()
  6. {
  7. echo '这是index操作';
  8. }
  9. public function php(){
  10. echo '这是php操作';
  11. }
  12. }

浏览地址:

http://zhang.com/Index/index

默认可以直接写成 http://zhang.com

http://zhang.com/Index/php

如果我们需要对所有控制器进行统一操作,可以对其继承的父类BaseController进行设置。

3、多操作方法

在同一个控制器中,我们可以定义多个操作方法

  1. namespace app\controller;
  2. use app\BaseController;
  3. class Index extends BaseController
  4. {
  5. public function index()
  6. {
  7. echo '这是index操作';
  8. }
  9. public function php()
  10. {
  11. echo '这是php操作';
  12. }
  13. }

4、多控制器

在controller目录下,我们也可以新建多个控制器文件

  1. namespace app\controller;
  2. use app\BaseController;
  3. class Login extends BaseController
  4. {
  5. public function login()
  6. {
  7. echo '这是登录操作';
  8. }
  9. public function reg()
  10. {
  11. echo '这是注册操作';
  12. }
  13. }

四、安装视图

  • 视图功能由 \think\View 类配合视图驱动(也即模板引擎驱动)类一起完成,新版仅内置了PHP原生模板引擎(主要用于内置的异常页面输出),如果需要使用其它的模板引擎需要单独安装相应的模板引擎扩展

ThinkPHP6已独立出一套模版,命名为:ThinkTemplate模板引擎;

ThinkTemplate模板引擎开发指南

使用think-template模板引擎,需安装think-view;

composer require topthink/think-view

1、安装视图

  1. d:
  2. cd phpstudy_pro/WWW/tp6
  3. composer require topthink/think-view

2、使用视图类

  • 要使用View,必须先引入 think\facade\View 门面类
  • fetch 方法渲染页面

参数:静态页面的路径,默认对应的静态页面

app\controller\Index.php代码

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\View;
  4. class Index extends BaseController
  5. {
  6. public function index(View $view)
  7. {
  8. return $view->fetch();
  9. }
  10. }

核心Facade类库

think\facade\View 门面类

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Test
  5. {
  6. public function index(){
  7. return View::fetch();
  8. }
  9. }
  10. ?>

事实上,依赖注入和使用Facade代理的效果大多数情况下是一样的,都是从容器中获取对象实例。例如:

  1. <?php
  2. namespace app\index\controller;
  3. use think\View;
  4. class Index
  5. {
  6. public function index(View $view)
  7. {
  8. return $view->fetch();
  9. }
  10. }

和下面的作用是一样的

  1. <?php
  2. namespace app\index\controller;
  3. use think\facade\View;
  4. class Index
  5. {
  6. public function index()
  7. {
  8. return View::fetch();
  9. }
  10. }

依赖注入的优势是支持接口的注入,而Facade则无法完成。

一定要注意两种方式的use引入类库的区别

3、创建视图模板

  • view 目录下,创建 Index/index.html 文件
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>tp</title>
  7. </head>
  8. <body>
  9. <h1>Hello World!</h1>
  10. </body>
  11. </html>

4、指定渲染模板

例如view\Index文件夹下有多个视图文件,index.html,demo.html

我们可以指定哪个html文件,默认是类名称对应视图目录,方法名称对应目录里html文件名称

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\View;
  4. class Index extends BaseController
  5. {
  6. public function index(View $view)
  7. {
  8. // 默认是渲染index.html,我们可以指定为demo.html
  9. return $view->fetch('demo');
  10. }
  11. }

备:Index类对应view下面的目录 Index

备:index方法对应view下面的目录里的静态文件index.html

5、数据交互

app\controller\Index.php

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\View;
  4. class Index extends BaseController
  5. {
  6. public function index()
  7. {
  8. View::assign([
  9. 'name' => 'zhangshuai',
  10. 'age' => 18
  11. ]);
  12. return View::fetch();
  13. }
  14. }

app\view\Index\index.html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. <h1>姓名:{$name}</h1>
  10. <h1>年龄:{$age}</h1>
  11. </body>
  12. </html>

6、视图目录

  • view 目录 可以放根目录,也可有放到 app 目录


五、视图标签

  • 模板引擎支持普通标签XML标签方式两种标签定义,分别用于不同的目的
标签类型 描述
普通标签 主要用于输出变量、函数过滤和做一些基本的运算操作
XML标签 也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展

1、模板变量

  • assign 方法赋值属于全局变量赋值
  • 模版输出 {$name}全局变量

app\controller\Index.php代码

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Index
  5. {
  6. public function index()
  7. {
  8. // 模板变量赋值
  9. // View:assign('name','zhang');
  10. // View::assign('email','zhang@qq.com');
  11. // 或者数组形式批量赋值
  12. View::assign([
  13. 'name'=>'zhang',
  14. 'email'=>'zhang@qq.com'
  15. ]);
  16. // 模板输出
  17. return View::fetch();
  18. }
  19. }

view\Index\index.html代码

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>ThinkPHP6</title>
  6. </head>
  7. <body>
  8. 姓名:{$name}
  9. <br>
  10. 邮箱:{$email}
  11. </body>
  12. </html>

2、运算符

运算符 示例
+ {$a+$b}
- {$a-$b}
* {$a*$b}
/ {$a/$b}
% {$a%$b}
++ {$a++} 或 {++$a}
{$a—} 或{—$a}
综合运算 {$a+$b*10+$c}
三元运算符 {$a==$b ? ‘yes’ : ‘no’}

这里我们新建

  • 控制器 app\controller\Test.php

  • 视图app\view\Test\index.html

app\controller\Test.php 文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Test
  5. {
  6. public function index()
  7. {
  8. View::assign('a',100);
  9. View::assign('b',21);
  10. return View::fetch();
  11. }
  12. }
  13. ?>

app\view\Test\index.html文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>运算符</title>
  5. </head>
  6. <body>
  7. <div>{$a+$b}</div>
  8. <div>{$a-$b}</div>
  9. <div>{$a*$b}</div>
  10. <div>{$a/$b}</div>
  11. <div>{$a%$b}</div>
  12. <div>{$a++}</div>
  13. <div>{++$a}</div>
  14. <div>{$a--}</div>
  15. <div>{--$a}</div>
  16. <div>{$c ? '存在' : '不存在'}</div>
  17. </body>
  18. </html>

预览地址:http://zhang.com/index.php/Test/index

3、模版函数

方法 描述
date 日期格式化(支持各种时间类型)
format 字符串格式化
upper 转换为大写
lower 转换为小写
first 输出数组的第一个元素
last 输出数组的最后一个元素
default 默认值
raw 不使用(默认)转义
md5 md5加密
substr 截取字符串
  • 可以多函数调用

controller文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Test
  5. {
  6. public function index(){
  7. View::assign('time',1576048640);
  8. View::assign('num',10.0032);
  9. View::assign('str','OUyangKE');
  10. View::assign('arr',['皮特朱','咩咩','欧阳克']);
  11. return View::fetch();
  12. }
  13. }
  14. ?>

view文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>模版函数 </title>
  5. </head>
  6. <body>
  7. <div>日期格式化{$time|date='Y-m-d H:i:s'}</div>
  8. <div>字符串格式化{$num|format='%02d'}</div>
  9. <div>小写转大写{$str|upper}</div>
  10. <div>大写转小写{$str|lower}</div>
  11. <div>数组第一个{$arr|first}</div>
  12. <div>数组最后一个{$arr|last}</div>
  13. <div>默认值:{$default|default="该用户很懒,什么也没有留下!"}</div>
  14. <div>字符串截取{$str|substr=0,3}</div>
  15. <div>md5散列处理{$str|md5}</div>
  16. <div>调用多个函数{$str|lower|substr=0,3}</div>
  17. </body>
  18. </html>

4、foreach循环标签

  • foreach标签的用法和PHP语法非常接近,用于循环输出数组或者对象的属性

controller文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Test
  5. {
  6. public function index(){
  7. $arr = [
  8. ['id'=>1,'name'=>'皮特朱'],
  9. ['id'=>2,'name'=>'咩咩'],
  10. ['id'=>3,'name'=>'欧阳克']
  11. ];
  12. View::assign('arr',$arr);
  13. return View::fetch();
  14. }
  15. }
  16. ?>

view文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>循环标签</title>
  5. </head>
  6. <body>
  7. {foreach $arr as $k=>$v}
  8. <span>索引:{$k}--</span>
  9. <span>ID:{$v['id']}--</span>
  10. <span>姓名:{$v['name']}</span>
  11. <br>
  12. {/foreach}
  13. </body>
  14. </html>

5、volist 循环标签

  • 二维数组的结果输出
  • name 模板赋值的变量名称
  • id 当前的循环变量,可以随意起名
  • key 下标,从1开始,默认变量i
  • offset 开始行数
  • length 获取行数
  • empty 如果数据为空,显示此文字

view文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>循环标签</title>
  5. </head>
  6. <body>
  7. {foreach $arr as $k=>$v}
  8. <span>索引:{$k}--</span>
  9. <span>ID:{$v['id']}--</span>
  10. <span>姓名:{$v['name']}</span>
  11. <br>
  12. {/foreach}
  13. <hr>
  14. {volist name="arr" id="v" key="k" offset="0" length="3"}
  15. <span>索引:{$k}</span>
  16. <span>ID:{$v['id']}</span>
  17. <span>姓名:{$v['name']}</span>
  18. <br>
  19. {/volist}
  20. </body>
  21. </html>

6、if 判断标签

  • if标签的用法和PHP语法非常接近,用于条件判断

controller文件

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Test
  5. {
  6. public function index(){
  7. View::assign('status',1);
  8. View::assign('order_status',4);
  9. return View::fetch();
  10. }
  11. }
  12. ?>

view文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>if 判断标签</title>
  5. </head>
  6. <body>
  7. {if $status == 1}
  8. <span>请求成功</span>
  9. {/if}
  10. {if $status == 0}
  11. <span>请求失败</span>
  12. {else/}
  13. <span>数据异常</span>
  14. {/if}
  15. {if $order_status == 0}
  16. <span>未支付</span>
  17. {elseif $order_status == 1/}
  18. <span>已支付</span>
  19. {elseif $order_status == 2/}
  20. <span>已发货</span>
  21. {elseif $order_status == 3/}
  22. <span>已收货</span>
  23. {elseif $order_status == 4/}
  24. <span>已评论</span>
  25. {/if}
  26. </body>
  27. </html>

7、switch 判断标签

  • switch标签的用法和PHP语法非常接近,用于条件判断

view文件

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>switch 判断标签</title>
  5. </head>
  6. <body>
  7. {switch $order_status}
  8. {case 0 }<div>未支付</div>{/case}
  9. {case 1 }<div>已支付 待发货</div>{/case}
  10. {case 2 }<div>已发货 待收货</div>{/case}
  11. {case 3 }<div>已收货 待评论</div>{/case}
  12. {case 4 }<div>已完成</div>{/case}
  13. {/switch}
  14. </body>
  15. </html>

8、包含文件

  • include标签,引入模版文件
  • load标签,引入资源文件(css、js)

view文件,把头部和尾部分文件

  1. {include file="public/header" /}
  2. {include file="public/left" /}
  3. {load href="/static/layui/css/layui.css" /}
  4. {load href="/static/layui/layui.js" /}
  5. {include file="public/tail" /}

9、其他标签

1、条件标签

标签 描述
in 判断变量是否存在某些值
notin 判断变量是否不存在某些值
between 判断变量是否存在某些值
notbetween 判断变量是否不存在某些范围值
present 判断某个变量是否 已定义
notpresent 判断某个变量是否 未定义
empty 判断某个变量是否为空
notempty 判断某个变量是否不为空
defined 判断某个常量是否 已定义
notdefined 判断某个常量是否 未定义
  1. public function index(){
  2. View::assign('number',100);
  3. View::assign('string','');
  4. return View::fetch();
  5. }
  1. {in name="number" value="99,100,101"}
  2. number等于99,100,101任意一个值
  3. {/in}
  4. {notin name="number" value="99,100,101"}
  5. number不等于99,100,101任意一个值
  6. {/notin}
  7. {between name="number" value="1,10"}
  8. number等于1 到 10 之间的任意一个值
  9. {/between}
  10. {notbetween name="number" value="1,10"}
  11. number不等于1 到 10 之间的任意一个值
  12. {/notbetween}
  13. {present name="number"}
  14. number已经定义
  15. {/present}
  16. {notpresent name="n"}
  17. n还没有定义
  18. {/notpresent}
  19. {empty name="string"}
  20. name为空值
  21. {/empty}
  22. {notempty name="string"}
  23. name有值
  24. {/notempty}
  25. {defined name="NAME"}
  26. NAME常量已经定义
  27. {/defined}
  28. {notdefined name="NAME"}
  29. NAME常量未定义
  30. {/notdefined}

2、比较标签

标签 描述
eq 等于
neq 不等于
gt 大于
egt 大于等于
lt 小于
elt 小于等于
heq 恒等于
nheq 不恒等于
  1. public function index(){
  2. View::assign("number",100);
  3. View::assign("string","欧阳克");
  4. return View::fetch();
  5. }
  1. {eq name="number" value="100"}
  2. number 等于 100
  3. {/eq}
  4. {neq name="number" value="101"}
  5. number 不等于 101
  6. {/neq}
  7. {gt name="number" value="33"}
  8. number 大于 33
  9. {/gt}
  10. {egt name="number" value="100"}
  11. number 大于等于 100
  12. {/egt}
  13. {lt name="number" value="200"}
  14. number 小于 200
  15. {/lt}
  16. {elt name="number" value="100"}
  17. number 小于等于 100
  18. {/elt}
  19. {heq name="string" value="欧阳克"}
  20. string 恒等于 欧阳克
  21. {/heq}
  22. {heq name="string" value="朱老师"}
  23. string 恒不等于 朱老师
  24. {/heq}

3、循环标签

标签 描述
for 计数循环
  • start:开始值
  • end:结束值
  • step:步进值,默认1
  • name:循环变量名,默认i
  1. {for start="1" end="50" step="5" name="i"}
  2. {$i}<br/>
  3. {/for}

4、杂项标签

标签 描述
literal 原样输出
php 使用原生php代码
  1. {literal}
  2. {$name} 这里$name不会被当作变量,而是普通字符
  3. {/literal}
  4. {php}
  5. echo '欧阳克';
  6. {/php}

六、配置文件

  • 根目录下的 config 目录下面就是所有的配置文件
  1. ├─config(配置目录)
  2. ├─app.php 应用配置
  3. ├─cache.php 缓存配置
  4. ├─console.php 控制台配置
  5. ├─cookie.php Cookie配置
  6. ├─database.php 数据库配置
  7. ├─filesystem.php 文件磁盘配置
  8. ├─lang.php 多语言配置
  9. ├─log.php 日志配置
  10. ├─middleware.php 中间件配置
  11. ├─route.php URL和路由配置
  12. ├─session.php Session配置
  13. ├─trace.php Trace配置
  14. ├─view.php 视图配置
  15. └─ ... 更多配置文件

1、项目配置

应用配置文件 app.php

  • show_error_msg 本地开启,上线后要关闭
  1. return [
  2. // 应用地址
  3. 'app_host' => env('app.host', ''),
  4. // 应用的命名空间
  5. 'app_namespace' => '',
  6. // 是否启用路由
  7. 'with_route' => true,
  8. // 默认应用
  9. 'default_app' => 'index',
  10. // 默认时区
  11. 'default_timezone' => 'Asia/Shanghai',
  12. // 应用映射(自动多应用模式有效)
  13. 'app_map' => [],
  14. // 域名绑定(自动多应用模式有效)
  15. 'domain_bind' => [],
  16. // 禁止URL访问的应用列表(自动多应用模式有效)
  17. 'deny_app_list' => [],
  18. // 异常页面的模板文件
  19. 'exception_tmpl' => app()->getThinkPath() . 'tpl/think_exception.tpl',
  20. // 错误显示信息,非调试模式有效
  21. 'error_message' => '页面错误!请稍后再试~',
  22. // 显示错误信息
  23. 'show_error_msg' => true,
  24. ];

‘show_error_msg’ => true 开启错误提示信息

  1. <?php
  2. namespace app\controller;
  3. use think\facade\View;
  4. class Test
  5. {
  6. public function index()
  7. {
  8. return View::fetch();
  9. }
  10. }
  11. ?>

渲染一个不存在的视图 模板文件view/Test/index.html

默认调错信息是关闭的,什么时候都提示’页面错误!请稍后再试~’

app\view\Test\index.html

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>tp</title>
  5. </head>
  6. <body>
  7. <h1>ThinkPHP</h1>
  8. </body>
  9. </html>

2、 视图配置

模版配置 view.php

  1. return [
  2. // 模板引擎类型使用Think
  3. 'type' => 'Think',
  4. // 默认模板渲染规则 1 解析为小写+下划线 2 全部转换小写 3 保持操作方法
  5. 'auto_rule' => 1,
  6. // 模板目录名
  7. 'view_dir_name' => 'view',
  8. // 模板后缀
  9. 'view_suffix' => 'html',
  10. // 模板文件名分隔符
  11. 'view_depr' => DIRECTORY_SEPARATOR,
  12. // 模板引擎普通标签开始标记
  13. 'tpl_begin' => '{',
  14. // 模板引擎普通标签结束标记
  15. 'tpl_end' => '}',
  16. // 标签库标签开始标记
  17. 'taglib_begin' => '{',
  18. // 标签库标签结束标记
  19. 'taglib_end' => '}',
  20. ];
  • 模版后缀,改为php、htm、xml、aps试试
  • 普通标签和XML标签的标记改变试试{{$name}}、{zs{$name}}、[$name]、&&$name&&、%$name%

3、数据库配置

  1. return [
  2. // 默认使用的数据库连接配置
  3. 'default' => env('database.driver', 'mysql'),
  4. // 自定义时间查询规则
  5. 'time_query_rule' => [],
  6. // 自动写入时间戳字段
  7. // true为自动识别类型 false关闭
  8. // 字符串则明确指定时间字段类型 支持 int timestamp datetime date
  9. 'auto_timestamp' => true,
  10. // 时间字段取出后的默认时间格式
  11. 'datetime_format' => 'Y-m-d H:i:s',
  12. // 数据库连接配置信息
  13. 'connections' => [
  14. 'mysql' => [
  15. // 数据库类型
  16. 'type' => env('database.type', 'mysql'),
  17. // 服务器地址
  18. 'hostname' => env('database.hostname', '127.0.0.1'),
  19. // 数据库名
  20. 'database' => env('database.database', 'mydb'),
  21. // 用户名
  22. 'username' => env('database.username', 'root'),
  23. // 密码
  24. 'password' => env('database.password', 'root'),
  25. // 端口
  26. 'hostport' => env('database.hostport', '3306'),
  27. // 数据库连接参数
  28. 'params' => [],
  29. // 数据库编码默认采用utf8
  30. 'charset' => env('database.charset', 'utf8'),
  31. // 数据库表前缀
  32. 'prefix' => env('database.prefix', ''),
  33. // 数据库部署方式:0 集中式(单一服务器),1 分布式(主从服务器)
  34. 'deploy' => 0,
  35. // 数据库读写是否分离 主从式有效
  36. 'rw_separate' => false,
  37. // 读写分离后 主服务器数量
  38. 'master_num' => 1,
  39. // 指定从服务器序号
  40. 'slave_no' => '',
  41. // 是否严格检查字段是否存在
  42. 'fields_strict' => true,
  43. // 是否需要断线重连
  44. 'break_reconnect' => false,
  45. // 监听SQL
  46. 'trigger_sql' => env('app_debug', true),
  47. // 开启字段缓存
  48. 'fields_cache' => false,
  49. ],
  50. // 更多的数据库配置信息
  51. ],
  52. ];

4、env 环境变量定义

配置 .env

  • 默认安装后的根目录有一个.example.env 环境变量示例文件,如果要使用你可以直接改成.env 文件后进行修改配置
  1. APP_DEBUG = true
  2. [APP]
  3. DEFAULT_TIMEZONE = Asia/Shanghai
  4. [DATABASE]
  5. TYPE = mysql
  6. HOSTNAME = 127.0.0.1
  7. DATABASE = mydb
  8. USERNAME = username
  9. PASSWORD = password
  10. HOSTPORT = 3306
  11. CHARSET = utf8
  12. DEBUG = true
  13. [LANG]
  14. default_lang = zh-cn

七、使用 tp 核心功能

序号 (动态)系统类库 容器绑定标识 (门面)Facade 类 助手函数
1 think\App app think\facade\App app
2 think\Cache cache think\facade\Cache cache
3 think\Config config think\facade\Config config
4 think\Cookie cookie think\facade\Cookie cookie
5 think\Console console
6 think\Db db think\facade\Db
7 think\Debug debug
8 think\Env env think\facade\Env env
9 think\Event event think\facade\Event event
10 think\Http http
11 think\Lang lang think\facade\Lang lang
12 think\Log log think\facade\Log
13 think\Middleware middleware think\facade\Middleware
14 think\Request request think\facade\Request request
15 think\Response response response
16 think\Filesystem filesystem think\facade\Filesystem
17 think\Route route think\facade\Route
18 think\Session session think\facade\Session session
19 think\Validate validate think\facade\Validate validate
20 think\View view think\facade\View view

1、系统库类

https://www.kancloud.cn/manual/thinkphp6_0/1037489

  • 绑定标识调用的时候区分大小写,系统已经内置绑定了核心常用类库,无需重复绑定
  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\View;
  4. use think\Config;
  5. class Index extends BaseController
  6. {
  7. // 使用时,需要通过参数依赖注入到方法体中
  8. public function index(View $view,Config $config)
  9. {
  10. print_r($config->get('app'));
  11. print_r($config->get('database.connections'));
  12. $view->assign([
  13. 'name' => 'zhangshuai'
  14. ]);
  15. return $view->fetch('index');
  16. }
  17. }

2、(门面) Facade 类

https://www.kancloud.cn/manual/thinkphp6_0/1037491

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\View;
  4. use think\facade\Config;
  5. class Index extends BaseController
  6. {
  7. public function index()
  8. {
  9. // 无需依赖注入参数,直接通过容器绑定标识::静态调用方法
  10. print_r(Config::get('app'));
  11. print_r(Config::get('database.connections'));
  12. View::assign([
  13. 'name' => 'zhangshuai'
  14. ]);
  15. return View::fetch('index');
  16. }
  17. }

3、助手函数

https://www.kancloud.cn/manual/thinkphp6_0/1037653

  1. namespace app\controller;
  2. use app\BaseController;
  3. class Index extends BaseController
  4. {
  5. public function index()
  6. {
  7. print_r(config('app'));
  8. print_r(config('database.connections'));
  9. return view('index', [
  10. 'name' => 'zhangshuai'
  11. ]);
  12. }
  13. }

八、数据库操作

查询构造器:https://www.kancloud.cn/manual/thinkphp6_0/1037532

查询数据
添加数据
更新数据
删除数据

查询表达式
链式操作

1、数据表

  1. CREATE TABLE `boke` (
  2. `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'ID',
  3. `title` varchar(300) DEFAULT NULL COMMENT '标题',
  4. `img` varchar(300) DEFAULT NULL COMMENT '图片',
  5. `content` text COMMENT '内容',
  6. `date` date DEFAULT NULL COMMENT '时间',
  7. `cat` varchar(50) DEFAULT NULL COMMENT '类型',
  8. `num` int(10) unsigned DEFAULT '0' COMMENT '浏览量',
  9. `hot` tinyint(1) unsigned DEFAULT '0' COMMENT '热门 1是 0否',
  10. `status` tinyint(1) unsigned DEFAULT '1' COMMENT '状态 1开启 0关闭',
  11. PRIMARY KEY (`id`)
  12. ) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;
  13. INSERT INTO `boke` VALUES ('1', '《天龙八部》系列课程', 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg', 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!', '2021-02-18', 'PHP', '0', '0', '1');
  14. INSERT INTO `boke` VALUES ('2', 'php中文网《玉女心经》公益PHP WEB培训系列课程汇总', 'https://img.php.cn/upload/course/000/126/153/5aa23f0ded921649.jpg', 'php中文网近期推出的《独孤九贱》系列、《天龙八部》系列、《玉女心经》原创视频课程,好评如潮!由于《玉女心经》系列课程没有做成专题,所以大家找起来有点费劲,为了更好的服务广大php中文网粉丝们,特把课程整理汇总给大家!', '2021-02-11', 'PHP', '0', '0', '1');
  15. INSERT INTO `boke` VALUES ('3', 'html5中submit是按钮么', null, 'html5中submit是按钮,它是button的一个特例,它把提交这个动作自动集成了。submit会自动将表单的数据提交,使用submit时需要验证要加return', '2021-02-10', '前端', '0', '0', '1');
  16. INSERT INTO `boke` VALUES ('4', 'css如何去除下划线', null, 'css去除下划线的方法:首先创建一个HTML示例文件;然后在body中定义一个a标签;最后通过css属性为“a{text-decoration:none}”去除下划线即可。', '2021-02-01', '前端', '0', '0', '1');
  17. INSERT INTO `boke` VALUES ('5', 'linux如何查看进程', 'https://img.php.cn/upload/article/202102/24/2021022409272725770.jpg', 'windows defender是windows系统自带的一款杀毒软件,对于很多人来说,这款软件不仅没有起到保护电脑的作用,还增加了很多不必要的麻烦。比如我们安装了一些破解版软件,windows defender就会杀这些破解软件,很让人讨厌。', '2021-02-01', '服务器', '1', '0', '1');
  18. INSERT INTO `boke` VALUES ('6', 'Ubuntu20.04/18.04下安装或更新至PHP8', 'https://img.php.cn/upload/article/000/000/020/2c02ff679ec7afab974a691aac09d535-0.png', '本指南让你了解如何安装最新的 php 版本 8,并在你的任何 VPS、云服务器、专用主机上的 Ubuntu 20.0 或 18.04 系统中升级到最新版本,并将其配置为 Apache 和 Nginx。', '2021-02-01', 'PHP', '5', '0', '1');
  19. INSERT INTO `boke` VALUES ('7', 'PHP 8新特性之JIT对PHP应用性能的影响', null, '即将发布的 PHP 8 最受大家关注的新特性就是引入了对 JIT 的支持,我已经简单介绍了 JIT 是什么,以及与 Opcache 的区别', '2021-02-01', 'PHP', '97', '0', '1');
  20. INSERT INTO `boke` VALUES ('8', '详解PHP7中的zval结构和引用计数机制', 'https://img.php.cn/upload/article/000/000/024/6053286f637d2966.jpg', '最近在查阅 PHP7 垃圾回收的资料的时候,网上的一些代码示例在本地环境下运行时出现了不同的结果,使我一度非常迷惑。 仔细一想不难发现问题所在:这些文章大多是 PHP5.x 时代的,而 PHP7 发布后,采用了新的 zval 结构,相关的资料也比较贫瘠,所以我结合一些资料做了一个总结,主要侧重于解释新 zval 容器中的引用计数机制,如有谬误,还望不吝指教。', '2021-01-01', 'PHP', '185', '0', '1');
  21. INSERT INTO `boke` VALUES ('9', 'php登录失败怎么处理', 'https://img.php.cn/upload/article/202103/19/2021031909102812621.jpg', 'php登录失败的处理方法:首先创建一个表负责记录用户登录的信息;然后从user_login_info表查询最近30分钟内有没有相关密码错误的记录;接着统计记录总条数是否达到设定的错误次数;最后设置登录密码错误次数限制即可。', '2021-01-01', 'PHP', '0', '0', '1');
  22. INSERT INTO `boke` VALUES ('10', 'php如何去掉字符串末尾字符', 'https://img.php.cn/upload/article/000/000/024/6053250623ecf930.jpg', 'php去掉字符串末尾字符的方法:1、直接使用substr()函数倒序裁掉最后一位字符,语法“substr(string,0,-1)”;2、使用rtrim()函数,语法“rtrim(string,charlist)”。', '2021-01-01', 'PHP', '0', '0', '1');
  23. INSERT INTO `boke` VALUES ('11', 'php异常和错误的区别是什么', 'https://img.php.cn/upload/article/202103/18/2021031817511956954.jpg', 'php异常和错误的区别:1、PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的;2、PHP异常一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。', '2021-01-01', 'PHP', '0', '0', '1');
  24. INSERT INTO `boke` VALUES ('12', 'linux下如何查看php-fpm是否安装', 'https://img.php.cn/upload/article/000/000/024/60532042dd48f908.jpg', 'linux下查看php-fpm是否安装的方法:打开终端,执行“whereis php-fpm”或者“find / -name php-fpm”命令,如果成功输出php-fpm的安装位置,则表示有安装。', '2021-01-01', 'PHP', '0', '0', '1');
  25. INSERT INTO `boke` VALUES ('13', 'php的数据库修改语句是什么', 'https://img.php.cn/upload/article/202103/18/2021031817353472746.jpg', 'php的数据库修改语句是UPDATE,用于更新数据库表中已存在的记录,语法为【UPDATE table_name SET column1=value, column2=value2,...WHERE some_column=some 】。', '2021-01-01', 'PHP', '0', '0', '1');
  26. INSERT INTO `boke` VALUES ('14', 'php怎么设置状态码', 'https://img.php.cn/upload/article/000/000/024/60531da39e7a2975.jpg', '在php中,可以使用http_response_code()函数来设置状态码,该函数用于设置响应的HTTP状态码,语法格式“http_response_code (状态码) ”。', '2021-01-01', 'PHP', '0', '0', '1');
  27. INSERT INTO `boke` VALUES ('15', 'excel怎么冻结选定区域', 'https://img.php.cn/upload/article/202103/18/2021031817270344979.jpg', 'excel冻结选定区域的方法:首先选定你想固定不变的位置;然后点击表格最上面的菜单栏“视图”那里,再点击“冻结窗格”下方的“冻结窗格”即可。', '2021-01-01', 'PHP', '0', '0', '1');

2、查询语句

查询单个数据使用find方法:

  1. // table方法必须指定完整的数据表名
  2. Db::table('think_user')->where('id', 1)->find();

最终生成的SQL语句可能是:

  1. SELECT * FROM `think_user` WHERE `id` = 1 LIMIT 1

find方法查询结果不存在,返回 null,否则返回结果数组

查询多个数据(数据集)使用select方法:

  1. Db::table('think_user')->where('status', 1)->select();

最终生成的SQL语句可能是:

  1. SELECT * FROM `think_user` WHERE `status` = 1

select 方法查询结果是一个数据集对象,如果需要转换为数组可以使用

查询某个字段的值可以用

  1. // 返回某个字段的值
  2. Db::table('think_user')->where('id', 1)->value('name');

value 方法查询结果不存在,返回 null

查询某一列的值可以用

  1. // 返回数组
  2. Db::table('think_user')->where('status',1)->column('name');
  3. // 指定id字段的值作为索引
  4. Db::table('think_user')->where('status',1)->column('name', 'id');

如果要返回完整数据,并且添加一个索引值的话,可以使用

  1. // 指定id字段的值作为索引 返回所有数据
  2. Db::table('think_user')->where('status',1)->column('*','id');

column方法查询结果不存在,返回空数组

举例演示:

  • find 方法查询单条数据,结果返回一维数组,数据不存在,返回 null
  1. <?php
  2. namespace app\controller;
  3. use think\facade\Db;
  4. class Index
  5. {
  6. public function index()
  7. {
  8. // 查询第五行内容
  9. $find = Db::table('boke')->find(1);
  10. echo "<pre>";
  11. print_r($find);
  12. }
  13. }
  14. ?>

  • select 方法查询多条数据,结果返回对象,数据不存在,返回空对象
  1. <?php
  2. namespace app\controller;
  3. use think\facade\Db;
  4. class Index
  5. {
  6. public function index()
  7. {
  8. $select = Db::table('boke')->select();
  9. echo "<pre>";
  10. print_r($select);
  11. }
  12. }
  13. ?>

  • value 查询某个字段的值,结果返回文本,数据不存在,返回 null
  1. public function index(){
  2. // 查询id为6的文章标题,不加条件默认返回第一条
  3. $value = Db::table('boke')->where(['id'=>6])->value('title');
  4. print_r($value);
  5. }
  • column 查询某一列的值,结果返回一维数组,数据不存在,返回空数组
  1. public function index(){
  2. echo "<pre>";
  3. // 默认返回索引数组
  4. $column = Db::table('boke')->column('title');
  5. print_r($column);
  6. // 指定键值 返回关联数组
  7. // 注意:指定的键名不能重复,否则只返回第一条
  8. $column = Db::table('boke')->column('title','id');
  9. print_r($column);
  10. // *还代替字段名称返回所有字段
  11. $column = Db::table('boke')->column('*','id');
  12. print_r($column);
  13. }

3、添加语句

  • insert 1、添加一条数据,成功返回条数
  1. public function index(){
  2. $data = [
  3. 'title'=>'在线考试系统实战【公益直播】',
  4. 'img'=>'https://img.php.cn/upload/course/000/000/001/60862c6ba99af257.png',
  5. 'content'=>'三天大型公益直播课《模仿驾校考试系统实战开发》,使用框架: bootstrap、jquery、ThinkPHP6.0',
  6. 'date'=>'2021-05-06',
  7. 'cat'=>'PHP'
  8. ];
  9. $insert = Db::table('boke')->insert($data);
  10. print_r($insert);
  11. }
  • insertGetId 添加一条数据,成功返回自增主键
  1. public function index(){
  2. $data = [
  3. 'title'=>'新版APP全新上线,打造最佳学习体验',
  4. 'img'=>'https://img.php.cn/upload/article/000/000/003/6093abebf1766794.jpg',
  5. 'content'=>'程序员梦开始的地方,支持视频课程、直播课堂、手册等学习功能',
  6. 'date'=>'2021-05-08',
  7. 'cat'=>'APP'
  8. ];
  9. $insert = Db::table('boke')->insertGetId($data);
  10. print_r($insert);
  11. }
  • insertAll 添加多条数据,成功返回条数
  1. public function index(){
  2. $data = [
  3. [
  4. 'title'=>'在线报名系统(移动端)实战【公益直播】',
  5. 'img'=>'https://img.php.cn/upload/course/000/000/001/6072932baeb4e177.png',
  6. 'content'=>'大型公益课,2021.4.12号晚上20:00开始,连续5晚,全程直播,一起开发一个中小学兴趣班报名系统!',
  7. 'date'=>'2021-04-23',
  8. 'cat'=>'PHP'
  9. ],
  10. [
  11. 'title'=>'Vue.js开发基础',
  12. 'img'=>'https://img.php.cn/upload/course/000/000/015/6077fb8677ac6448.png',
  13. 'content'=>'Vue.js是非常流行的一个前端开发框架,采用渐进式底层向上开发模式,使用了主流的MVVM设计框架。本课以Vue.js开发的核心理念与常用技术为背景,让您在最短的时间内理解并掌握Vue.js框架的核心知识,为进一步深造打下良好的基础。',
  14. 'date'=>'2021-04-28',
  15. 'cat'=>'JS'
  16. ]
  17. ];
  18. $insert = Db::table('boke')->insertAll($data);
  19. print_r($insert);
  20. }

4、修改语句

更多使用:https://www.kancloud.cn/manual/thinkphp6_0/1037535

  • update 修改数据,成功返回条数
  1. public function index(){
  2. $data = ['title'=>'修改后的标题'];
  3. $update = Db::table('boke')->where('id',1)->update($data);
  4. print_r($update);
  5. }
  • inc 自增字段的值
  1. public function index(){
  2. # 字段的值增加1
  3. $inc = Db::table('boke')->where('id',5)->inc('num')->update();
  4. print_r($inc);
  5. # 字段的值增加5
  6. $inc = Db::table('boke')->where('id',6)->inc('num',5)->update();
  7. print_r($inc);
  8. }
  • dec 自减字段的值
  1. public function index(){
  2. # 字段的值减去1
  3. $dec = Db::table('boke')->where('id',7)->dec('num')->update();
  4. print_r($dec);
  5. # 字段的值减去5
  6. $dec = Db::table('boke')->where('id',8)->dec('num',5)->update();
  7. print_r($dec);
  8. }

5、删除语句

  1. // 根据主键删除
  2. Db::table('think_user')->delete(1);
  3. Db::table('think_user')->delete([1,2,3]);
  4. // 条件删除
  5. Db::table('think_user')->where('id',1)->delete();
  6. Db::table('think_user')->where('id','<',10)->delete();

最终生成的SQL语句可能是:

  1. DELETE FROM `think_user` WHERE `id` = 1
  2. DELETE FROM `think_user` WHERE `id` IN (1,2,3)
  3. DELETE FROM `think_user` WHERE `id` = 1
  4. DELETE FROM `think_user` WHERE `id` < 10

delete方法返回影响数据的条数,没有删除返回 0

如果不带任何条件调用delete方法会提示错误,如果你确实需要删除所有数据,可以使用

  1. // 无条件删除所有数据
  2. Db::name('user')->delete(true);

最终生成的SQL语句是(删除了表的所有数据):

  1. DELETE FROM `think_user`

一般情况下,业务数据不建议真实删除数据,系统提供了软删除机制(模型中使用软删除更为方便)。

  1. // 软删除数据 使用delete_time字段标记删除
  2. Db::name('user')
  3. ->where('id', 1)
  4. ->useSoftDelete('delete_time',time())
  5. ->delete();

实际生成的SQL语句可能如下(执行的是UPDATE操作):

  1. UPDATE `think_user` SET `delete_time` = '1515745214' WHERE `id` = 1

useSoftDelete方法表示使用软删除,并且指定软删除字段为delete_time,写入数据为当前的时间戳。

  • delete 删除数据,成功返回条数,没有删除返回 0
  1. public function index(){
  2. # 根据条件删除数据
  3. $delete = Db::table('boke')->where('id',1)->delete();
  4. print_r($delete);
  5. # 删除主键为2的数据
  6. $delete = Db::table('boke')->delete(2);
  7. print_r($delete);
  8. # 删除整表数据
  9. $delete = Db::table('boke')->delete(true);
  10. print_r($delete);
  11. }
  • useSoftDelete 软删除,不建议真实删除数据,TP 系统提供了软删除机制
  1. public function index(){
  2. # 软删除
  3. $delete = Db::table('boke')->useSoftDelete('status',9)->delete();
  4. print_r($delete);
  5. }

6.总结

  1. Db::table('表面')
  2. // 查询语句
  3. find() 单条查询
  4. select() 查询全部
  5. value() 查询某字段的值
  6. column() 查询某列字段
  7. // 添加语句
  8. insert() 添加单条数据 返回条数
  9. insertGetId() 添加单条数据 返回主键
  10. insertAll() 添加多条数据 返回条数
  11. // 修改语句
  12. update(array)
  13. inc() 某字段的值+1
  14. dec() 某字段的值-1
  15. // 删除语句
  16. delete() 删除数据
  17. useSoftDelete('static',0) 软删除 相当于修改static的值
  18. // 删除和修改语句都必须在前面进行where条件限定,否者tp的保护机制是禁止操作全部数据的。
  19. // 条件语句
  20. // 注意:条件操作语句必须在增删改查语句的前面,不能放置在最后
  21. https://www.kancloud.cn/manual/thinkphp6_0/1037538

八、实战案例

博客下载

1、获取数据

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. class Index extends BaseController
  6. {
  7. public function index()
  8. {
  9. $select = Db::table('boke')->select();
  10. View::assign([
  11. 'select' => $select
  12. ]);
  13. return View::fetch('index');
  14. }
  15. }

2、前后端交互

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. {foreach($select as $select_v)}
  10. <div id="content" role="main">
  11. <article>
  12. <header class="entry-header">
  13. <h1 class="entry-title">
  14. <a href="/details.html" title="构建Nginx和PHP镜像" rel="bookmark">{$select_v['title']}</a>
  15. </h1>
  16. </header>
  17. <div class="entry-content">{$select_v['title']}</div>
  18. <footer class="entry-meta">
  19. 发布于
  20. <a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
  21. <time class="entry-date" datetime="2020-10-02">{$select_v['date']}</time>
  22. </a>
  23. 属于<a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category">{$select_v['cat']}</a>分类
  24. </footer>
  25. </article>
  26. </div>
  27. {/foreach}
  28. </body>
  29. </html>

rint_r($delete);
}

  1. ------
  2. #### 6.总结
  3. ```php
  4. Db::table('表面')
  5. // 查询语句
  6. find() 单条查询
  7. select() 查询全部
  8. value() 查询某字段的值
  9. column() 查询某列字段
  10. // 添加语句
  11. insert() 添加单条数据 返回条数
  12. insertGetId() 添加单条数据 返回主键
  13. insertAll() 添加多条数据 返回条数
  14. // 修改语句
  15. update(array)
  16. inc() 某字段的值+1
  17. dec() 某字段的值-1
  18. // 删除语句
  19. delete() 删除数据
  20. useSoftDelete('static',0) 软删除 相当于修改static的值
  21. // 删除和修改语句都必须在前面进行where条件限定,否者tp的保护机制是禁止操作全部数据的。
  22. // 条件语句
  23. // 注意:条件操作语句必须在增删改查语句的前面,不能放置在最后
  24. https://www.kancloud.cn/manual/thinkphp6_0/1037538

八、实战案例

博客下载

1、获取数据

  1. namespace app\controller;
  2. use app\BaseController;
  3. use think\facade\Db;
  4. use think\facade\View;
  5. class Index extends BaseController
  6. {
  7. public function index()
  8. {
  9. $select = Db::table('boke')->select();
  10. View::assign([
  11. 'select' => $select
  12. ]);
  13. return View::fetch('index');
  14. }
  15. }

2、前后端交互

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>Document</title>
  7. </head>
  8. <body>
  9. {foreach($select as $select_v)}
  10. <div id="content" role="main">
  11. <article>
  12. <header class="entry-header">
  13. <h1 class="entry-title">
  14. <a href="/details.html" title="构建Nginx和PHP镜像" rel="bookmark">{$select_v['title']}</a>
  15. </h1>
  16. </header>
  17. <div class="entry-content">{$select_v['title']}</div>
  18. <footer class="entry-meta">
  19. 发布于
  20. <a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
  21. <time class="entry-date" datetime="2020-10-02">{$select_v['date']}</time>
  22. </a>
  23. 属于<a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category">{$select_v['cat']}</a>分类
  24. </footer>
  25. </article>
  26. </div>
  27. {/foreach}
  28. </body>
  29. </html>

Correction status:Uncorrected

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post