标签类型 | 描述 |
---|---|
普通标签 | 主要用于输出变量、函数过滤和做一些基本的运算操作 |
XML 标签 | 也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展 |
运算符 | 示例 |
---|---|
+ | {$a+$b} |
- | {$a-$b} |
* | {$a*$b} |
/ | {$a/$b} |
% | {$a%$b} |
++ | {$a++} 或 {++$a} |
— | {$a—} 或{—$a} |
综合运算 | {$a+$b*10+$c} |
三元运算符 | {$a==$b ? ‘yes’ : ‘no’} |
app\controller\Code.php 文件
<?php
namespace app\controller;
use think\facade\View;
class Code
{
public function index()
{
View::assign('a',100);
View::assign('b',21);
return View::fetch('index');
}
}
?>
app\view\Code\index.html文件
<!DOCTYPE html>
<html>
<head>
<title>运算符</title>
</head>
<body>
<div>{$a+$b}</div>
<div>{$a-$b}</div>
<div>{$a*$b}</div>
<div>{$a/$b}</div>
<div>{$a%$b}</div>
<div>{$a++}</div>
<div>{++$a}</div>
<div>{$a--}</div>
<div>{--$a}</div>
<div>{$c ? '存在' : '不存在'}</div>
</body>
</html>
route\app.php 路由重定向
Route::get('code', 'code/index');
预览地址:http://zhang.com/code 即可
方法 | 描述 |
---|---|
date | 日期格式化(支持各种时间类型) |
format | 字符串格式化 |
upper | 转换为大写 |
lower | 转换为小写 |
first | 输出数组的第一个元素 |
last | 输出数组的最后一个元素 |
default | 默认值 |
raw | 不使用(默认)转义 |
md5 | md5 加密 |
substr | 截取字符串 |
controller 文件
<?php
namespace app\controller;
use think\facade\View;
class Code
{
public function index(){
View::assign('time',1576048640);
View::assign('num',10.0032);
View::assign('str','OUyangKE');
View::assign('arr',['皮特朱','咩咩','欧阳克']);
return View::fetch();
}
}
?>
view 文件
<!DOCTYPE html>
<html>
<head>
<title>模版函数 </title>
</head>
<body>
<!-- 日期格式化(支持各种时间类型) -->
<div>日期格式化{$time|date='Y-m-d H:i:s'}</div>
<!-- 字符串格式化 -->
<div>字符串格式化{$num|format='%02d'}</div>
<!-- 转换为大写 -->
<div>小写转大写{$str|upper}</div>
<!-- 转换为小写 -->
<div>大写转小写{$str|lower}</div>
<!-- 输出数组的第一个元素 -->
<div>数组第一个{$arr|first}</div>
<!-- 输出数组的最后一个元素 -->
<div>数组最后一个{$arr|last}</div>
<!-- 默认值 -->
<div>默认值:{$default|default="该用户很懒,什么也没有留下!"}</div>
<!-- 截取字符串 -->
<div>字符串截取{$str|substr=0,3}</div>
<!-- md5 加密 -->
<div>md5散列处理{$str|md5}</div>
<!-- 转换为小写,截取字符串 -->
<div>调用多个函数{$str|lower|substr=0,3}</div>
</body>
</html>
foreach
标签的用法和 PHP 语法非常接近,用于循环输出数组或者对象的属性controller 文件
<?php
namespace app\controller;
use think\facade\View;
class Code
{
public function index(){
$arr = [
['id'=>1,'name'=>'皮特朱'],
['id'=>2,'name'=>'咩咩'],
['id'=>3,'name'=>'欧阳克']
];
View::assign('arr',$arr);
return View::fetch();
}
}
?>
view 文件
<!DOCTYPE html>
<html>
<head>
<title>循环标签</title>
</head>
<body>
{foreach $arr as $k=>$v}
<span>索引:{$k}--</span>
<span>ID:{$v['id']}--</span>
<span>姓名:{$v['name']}</span>
<br>
{/foreach}
</body>
</html>
volist
循环标签name
模板赋值的变量名称id
当前的循环变量,可以随意起名key
下标,从 1 开始,默认变量 ioffset
开始行数length
获取行数empty
如果数据为空,显示此文字view 文件
<!DOCTYPE html>
<html>
<head>
<title>循环标签</title>
</head>
<body>
{foreach $arr as $k=>$v}
<span>索引:{$k}--</span>
<span>ID:{$v['id']}--</span>
<span>姓名:{$v['name']}</span>
<br>
{/foreach}
<hr>
{volist name="arr" id="v" key="k" offset="0" length="3"}
<span>索引:{$k}</span>
<span>ID:{$v['id']}</span>
<span>姓名:{$v['name']}</span>
<br>
{/volist}
</body>
</html>
if
判断标签if
标签的用法和 PHP 语法非常接近,用于条件判断controller 文件
<?php
namespace app\controller;
use think\facade\View;
class Code
{
public function index(){
View::assign('status',1);
View::assign('order_status',4);
return View::fetch();
}
}
?>
view 文件
{if $status == 1}
<div>开启</div>
{/if}
{if $status == 0}
<div>关闭</div>
{else/}
<div>开启</div>
{/if}
{if $order_status == 0}
<div>未支付</div>
{elseif $order_status == 1/}
<div>已支付 待发货</div>
{elseif $order_status == 2/}
<div>已发货 待收货</div>
{elseif $order_status == 3/}
<div>已收货 待评论</div>
{elseif $order_status == 4/}
<div>已完成</div>
{else/}
<div>已关闭</div>
{/if}
switch
判断标签switch
标签的用法和 PHP 语法非常接近,用于条件判断view 文件
<!DOCTYPE html>
<html>
<head>
<title>switch 判断标签</title>
</head>
<body>
{switch $order_status}
{case 0 }<div>未支付</div>{/case}
{case 1 }<div>已支付 待发货</div>{/case}
{case 2 }<div>已发货 待收货</div>{/case}
{case 3 }<div>已收货 待评论</div>{/case}
{case 4 }<div>已完成</div>{/case}
{/switch}
</body>
</html>
include
标签,引入模版文件load
标签,引入资源文件(css、js)view 文件,把头部和尾部分文件
{include file="public/header" /}
{load href="/static/layui/css/layui.css" /}
{load href="/static/layui/layui.js" /}
{include file="public/bottom" /}
标签 | 描述 |
---|---|
in | 判断变量是否存在某些值 |
notin | 判断变量是否不存在某些值 |
between | 判断变量是否存在某些值 |
notbetween | 判断变量是否不存在某些范围值 |
present | 判断某个变量是否 已定义 |
notpresent | 判断某个变量是否 未定义 |
empty | 判断某个变量是否为空 |
notempty | 判断某个变量是否不为空 |
defined | 判断某个常量是否 已定义 |
notdefined | 判断某个常量是否 未定义 |
public function index(){
View::assign('number',100);
View::assign('string','');
return View::fetch();
}
view 视图
<!DOCTYPE html>
<html>
<head>
<title>Code</title>
</head>
<body>
{in name="number" value="99,100,101"}
<div>number等于99,100,101任意一个值</div>
{/in}
{notin name="number" value="99,100,101"}
<div>number不等于99,100,101任意一个值</div>
{/notin}
{between name="number" value="1,10"}
<div>number等于1 到 10 之间的任意一个值</div>
{/between}
{notbetween name="number" value="1,10"}
<div>number不等于1 到 10 之间的任意一个值</div>
{/notbetween}
{present name="number"}
<div>number已经定义</div>
{/present}
{notpresent name="n"}
<div>n还没有定义</div>
{/notpresent}
{empty name="string"}
<div>name为空值</div>
{/empty}
{notempty name="string"}
<div>name有值</div>
{/notempty}
{defined name="NAME"}
<div>NAME常量已经定义</div>
{/defined}
{notdefined name="NAME"}
<div>NAME常量未定义</div>
{/notdefined}
</body>
</html>
else
标签
{in name="number" value="99,100,101"}
<div>number等于99,100,101任意一个值</div>
{else/}
<div>number不等于99,100,101任意一个值</div>
{/in}
{empty name="string"}
<div>内容为空</div>
{else /}
<div>正常显示</div>
{/empty}
标签 | 描述 |
---|---|
eq | 等于 |
neq | 不等于 |
gt | 大于 |
egt | 大于等于 |
lt | 小于 |
elt | 小于等于 |
heq | 恒等于 |
nheq | 恒不等于 |
public function index(){
View::assign("number",100);
View::assign("string","zhang");
return View::fetch();
}
{eq name="number" value="100"}
<div>number 等于 100</div>
{/eq}
{neq name="number" value="101"}
<div>number 不等于 101</div>
{/neq}
{gt name="number" value="33"}
<div>number 大于 33</div>
{/gt}
{egt name="number" value="100"}
<div>number 大于等于 100</div>
{/egt}
{lt name="number" value="200"}
<div>number 小于 200</div>
{/lt}
{elt name="number" value="100"}
<div>number 小于等于 100</div>
{/elt}
{heq name="string" value="zhang"}
<div>string 恒等于 zhang</div>
{/heq}
{heq name="string" value="zhang"}
<div>string 恒不等于 zhang</div>
{/heq}
标签 | 描述 |
---|---|
for | 计数循环 |
{for start="0" end="50" step="5" name="i"}
{$i}<br/>
{/for}
标签 | 描述 |
---|---|
literal | 原样输出,防止模板标签被解析 |
php | 使用原生 php 代码,可以在模板文件里面书写任意的 PHP 语句代码 |
{literal}
{$name} 这里$name不会被当作变量,而是普通字符
{/literal}
{php}
echo 'zhang';
{/php}
think\facade\Request类负责
)调用$_GET
$_POST
$_REQUEST
$_SERVER
$_SESSION
$_COOKIE
$_ENV
等系统变量,以及文件上传信息https://www.kancloud.cn/manual/thinkphp6_0/1037516
方法 | 说明 |
---|---|
param | 获取当前请求的变量 |
get | 获取 $_GET 变量 |
post | 获取 $_POST 变量 |
put | 获取 PUT 变量 |
delete | 获取 DELETE 变量 |
session | 获取 SESSION 变量 |
cookie | 获取 $_COOKIE 变量 |
request | 获取 $_REQUEST 变量 |
server | 获取 $_SERVER 变量 |
env | 获取 $_ENV 变量 |
route | 获取 路由(包括PATHINFO) 变量 |
middleware | 获取 中间件赋值/传递的变量 |
file | 获取 $_FILES 变量 |
PARAM
类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法param
方法会把当前请求类型的参数和路由变量以及GET请求合并,并且路由变量是优先的
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Index extends BaseController
{
public function index(){
echo "<pre>";
print_r( $_GET['t'] ); // 原生get接收
echo "<br>";
print_r( Request::param() ); // 获取当前请求的所有变量
echo "<br>";
print_r( Request::param('t') ); // 获取当前请求的id变量
echo "<br>";
print_r( Request::get() );
echo "</pre>";
/* http://zhang.com/code?t=zhang
zhang
Array
(
[t] => zhang
)
zhang
Array
(
[t] => zhang
)
*/
$select = Db::table('boke')->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
<form role="search" action="" method="GET">
<div>
<label class="screen-reader-text" for="t">搜索:</label>
<input placeholder="搜索" type="text" class="no-border" name="t" id="t"/>
<input type="submit" class="btn btn-default" value="搜索" />
</div>
</form>
$title = Request::get('t');
$select = Db::table('boke')->where('title',$title)->select();
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Index extends BaseController
{
public function index(){
echo "<pre>";
print_r( $_POST );
print_r( Request::post() );
print_r( Request::param() );
echo "</pre>";
$select = Db::table('boke')->where('title',Request::post('t'))->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
<form role="search" action="" method="POST">
<div>
<label class="screen-reader-text" for="t">搜索:</label>
<input placeholder="搜索" type="text" class="no-border" name="t" id="t"/>
<input type="submit" class="btn btn-default" value="搜索" />
</div>
</form>
序号 | 修饰符 | 作用 |
---|---|---|
1 | s | 强制转换为字符串类型 |
2 | d | 强制转换为整型类型 |
3 | b | 强制转换为布尔类型 |
4 | a | 强制转换为数组类型 |
5 | f | 强制转换为浮点类型 |
Request::get('t/d');
Request::post('t/s');
Request::get('id/d');
Request::post('name/s');
Request::param('price/f');
use think\facade\Request;
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Index extends BaseController
{
public function index(){
print_r( $_GET );
print_r( Request::get() );
$select = Db::table('boke')->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
use think\Request;
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
use think\Request;
class Index extends BaseController
{
public function index(Request $request){
print_r( $_GET );
print_r( $request->get() );
$select = Db::table('boke')->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
request()
在任何需要的时候直接调用当前请求对象
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
class Index extends BaseController
{
public function index(){
print_r( $_GET );
print_r( request()->get() );
$select = Db::table('boke')->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
input
获取输入数据 支持默认值和过滤
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
class Index extends BaseController
{
public function index(){
print_r( $_GET );
print_r( input('get.') );
print_r( input('get.t','') );
$select = Db::table('boke')->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
param
获取当前请求的变量PARAM
类型变量是框架提供的用于自动识别当前请求的一种变量获取方式,是系统推荐的获取请求参数的方法param
方法会把当前请求类型的参数和路由变量以及GET请求合并,并且路由变量是优先的
namespace app\controller;
use app\BaseController;
use think\facade\Db;
use think\facade\View;
use think\facade\Request;
class Index extends BaseController
{
public function index(){
print_r( Request::param() );
$select = Db::table('boke')->where('title',Request::param('t'))->select();
View::assign([
'select' => $select
]);
return View::fetch('index');
}
}
序号 | 方法 | 说明 |
---|---|---|
1 | get | 获取 $_GET 变量 |
2 | post | 获取 $_POST 变量 |
3 | param | 获取当前请求的变量 |
4 | put | 获取 PUT 变量 |
5 | delete | 获取 DELETE 变量 |
6 | session | 获取 SESSION 变量 |
7 | cookie | 获取 $_COOKIE 变量 |
8 | request | 获取 $_REQUEST 变量 |
9 | server | 获取 $_SERVER 变量 |
10 | env | 获取 $_ENV 变量 |
11 | route | 获取 路由(包括PATHINFO ) 变量 |
12 | middleware | 获取 中间件赋值/传递的变量 |
13 | file | 获取 $_FILES 变量 |
14 | all | 获取包括 $_FILES 变量在内的请求变量,相当于 param+file,版本:V6.0.8+ |
方法 | 说明 |
---|---|
method | 获取当前请求类型 |
has | 判断传值是否存在 |
isGet | 判断是否GET请求 |
isPost | 判断是否POST请求 |
isPut | 判断是否PUT请求 |
isDelete | 判断是否DELETE请求 |
isAjax | 判断是否AJAX请求 |
isPjax | 判断是否PJAX请求 |
isJson | 判断是否JSON请求 |
isMobile | 判断是否手机访问 |
isHead | 判断是否HEAD请求 |
isPatch | 判断是否PATCH请求 |
isOptions | 判断是否OPTIONS请求 |
isCli | 判断是否为CLI执行 |
isCgi | 判断是否为CGI模式 |
序号 | 方法 | 说明 |
---|---|---|
1 | host | 当前访问域名或者 IP |
2 | scheme | 当前访问协议 |
3 | port | 当前访问的端口 |
4 | remotePort | 当前请求的 REMOTE_PORT |
5 | protocol | 当前请求的 SERVER_PROTOCOL |
6 | contentType | 当前请求的 CONTENT_TYPE |
7 | domain | 当前包含协议的域名 |
8 | subDomain | 当前访问的子域名 |
9 | panDomain | 当前访问的泛域名 |
10 | rootDomain | 当前访问的根域名 |
11 | url | 当前完整 URL |
12 | baseUrl | 当前 URL(不含 QUERY_STRING) |
13 | query | 当前请求的 QUERY_STRING 参数 |
14 | baseFile | 当前执行的文件 |
15 | root | URL 访问根地址 |
16 | rootUrl | URL 访问根目录 |
17 | pathinfo | 当前请求 URL 的 pathinfo 信息(含 URL 后缀) |
18 | ext | 当前 URL 的访问后缀 |
19 | time | 获取当前请求的时间 |
20 | type | 当前请求的资源类型 |
21 | method | 当前请求类型 |
22 | rule | 当前请求的路由对象实例 |
23 | controller | 当前请求的控制器名 |
24 | action | 当前请求的操作名 |
echo Request::url();
echo '<hr>';
echo Request::url(true);
echo '<hr>';
echo Request::host();
echo '<hr>';
echo Request::controller();
echo '<hr>';
echo Request::action();
echo '<hr>';
print_r( Request::header() );
print_r( Request::header('ACCEPT_encoding') );
查询构造器:https://www.kancloud.cn/manual/thinkphp6_0/1037532
链式操作:https://www.kancloud.cn/manual/thinkphp6_0/1037538
cat
表、修改 boke
表的cat分类值为cat表中对应的id
CREATE TABLE `cat` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL COMMENT '分类名',
`sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序',
`status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态 1开启 0关闭',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;
INSERT INTO `cat` VALUES ('1', 'Layui', '0', '1');
INSERT INTO `cat` VALUES ('2', 'PHP', '0', '1');
INSERT INTO `cat` VALUES ('3', 'ThinkPHP', '0', '1');
INSERT INTO `cat` VALUES ('4', '前端', '0', '1');
INSERT INTO `cat` VALUES ('5', '小程序', '0', '1');
INSERT INTO `cat` VALUES ('6', '服务器', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('1', '修改后的标题', 'https://img.php.cn/upload/course/000/000/001/5d242759adb88970.jpg', 'PHP中文网因专业的讲师水平和高效的视频质量,推出的各种视频课程系列一直以来都深受大家喜爱。特别是《天龙八部》系列、《独孤九贱》系列、《玉女心经》系列的原创课程在行业内更是具有强大的影响力,好评不断!为了让大家能更快速方便的寻找到相关教程资源,我们在这篇文章中特意将《天龙八部》系列课程整理出来供大家有针对性得学习!', '2021-02-18', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('2', 'php中文网《玉女心经》公益PHP WEB培训系列课程汇总', 'https://img.php.cn/upload/course/000/126/153/5aa23f0ded921649.jpg', 'php中文网近期推出的《独孤九贱》系列、《天龙八部》系列、《玉女心经》原创视频课程,好评如潮!由于《玉女心经》系列课程没有做成专题,所以大家找起来有点费劲,为了更好的服务广大php中文网粉丝们,特把课程整理汇总给大家!', '2021-02-11', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('3', 'html5中submit是按钮么', NULL, 'html5中submit是按钮,它是button的一个特例,它把提交这个动作自动集成了。submit会自动将表单的数据提交,使用submit时需要验证要加return', '2021-02-10', '4', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('4', 'css如何去除下划线', NULL, 'css去除下划线的方法:首先创建一个HTML示例文件;然后在body中定义一个a标签;最后通过css属性为“a{text-decoration:none}”去除下划线即可。', '2021-02-01', '4', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('5', 'linux如何查看进程', 'https://img.php.cn/upload/article/202102/24/2021022409272725770.jpg', 'windows defender是windows系统自带的一款杀毒软件,对于很多人来说,这款软件不仅没有起到保护电脑的作用,还增加了很多不必要的麻烦。比如我们安装了一些破解版软件,windows defender就会杀这些破解软件,很让人讨厌。', '2021-02-01', '6', '1', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) 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', '2', '5', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('7', 'PHP 8新特性之JIT对PHP应用性能的影响', NULL, '即将发布的 PHP 8 最受大家关注的新特性就是引入了对 JIT 的支持,我已经简单介绍了 JIT 是什么,以及与 Opcache 的区别', '2021-02-01', '2', '97', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('8', '详解PHP7中的zval结构和引用计数机制', 'https://img.php.cn/upload/article/000/000/024/6053286f637d2966.jpg', '最近在查阅 PHP7 垃圾回收的资料的时候,网上的一些代码示例在本地环境下运行时出现了不同的结果,使我一度非常迷惑。 仔细一想不难发现问题所在:这些文章大多是 PHP5.x 时代的,而 PHP7 发布后,采用了新的 zval 结构,相关的资料也比较贫瘠,所以我结合一些资料做了一个总结,主要侧重于解释新 zval 容器中的引用计数机制,如有谬误,还望不吝指教。', '2021-01-01', '2', '185', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('9', 'php登录失败怎么处理', 'https://img.php.cn/upload/article/202103/19/2021031909102812621.jpg', 'php登录失败的处理方法:首先创建一个表负责记录用户登录的信息;然后从user_login_info表查询最近30分钟内有没有相关密码错误的记录;接着统计记录总条数是否达到设定的错误次数;最后设置登录密码错误次数限制即可。', '2021-01-01', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) 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', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('11', 'php异常和错误的区别是什么', 'https://img.php.cn/upload/article/202103/18/2021031817511956954.jpg', 'php异常和错误的区别:1、PHP错误是属于php程序自身的问题,一般是由非法的语法,环境问题导致的;2、PHP异常一般是业务逻辑上出现的不合预期、与正常流程不同的状况,不是语法错误。', '2021-01-01', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) 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', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) 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', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) 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', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('15', 'excel怎么冻结选定区域', 'https://img.php.cn/upload/article/202103/18/2021031817270344979.jpg', 'excel冻结选定区域的方法:首先选定你想固定不变的位置;然后点击表格最上面的菜单栏“视图”那里,再点击“冻结窗格”下方的“冻结窗格”即可。', '2021-01-01', '2', '0', '0', '1');
INSERT INTO `boke` (`id`, `title`, `img`, `content`, `date`, `cat`, `num`, `hot`, `status`) VALUES ('16', '在线考试系统实战【公益直播】', 'https://img.php.cn/upload/course/000/000/001/60862c6ba99af257.png', '三天大型公益直播课《模仿驾校考试系统实战开发》,使用框架: bootstrap、jquery、ThinkPHP6.0', '2021-05-06', '2', '0', '0', '1');
where
查询条件
// 查询id为10并且状态为1的记录
$find = Db::table('boke')->where('id',10)->where('status',1)->find();
print_r($find);
table
和 name
table
方法主要用于指定操作的数据表https://www.kancloud.cn/manual/thinkphp6_0/1037540
table方法指定的数据表需要完整的表名,但可以采用name
方式简化数据表前缀的传入,例如:
Db::table('think_user')->where('status>1')->select();
Db::table('db_name.think_user')->where('status>1')->select();
Db::name('user')->where('status>1')->select();
会自动获取当前模型对应的数据表前缀来生成 think_user
数据表名称。
// name和table功能一样都是指定表名称
$select = Db::name('boke')->select();
print_r($select);
$select = Db::table('boke')->select();
print_r($select);
// 注意:这里多表查询记录数为表1*表2总条数
// table可以一次查询多张表 '表1,表2'
$select = Db::table('boke,cat')->select();
print_r($select);
// 可以设置表别名 '表1 别名1,表2 别名1'
$select = Db::table('boke b,cat c')->select();
print_r($select);
// 也可以数组形式传递多张表名称
$select = Db::table([
'boke',
'cat'
])->select();
print_r($select);
// 数组形式传递表设置别名是以键值对的方式
$select = Db::table([
'boke' => 'b',
'cat' => 'c'
])->select();
print_r($select);
database.php
cat
表、 boke
表,都加上 zs_
前缀
use think\facade\Env;
return [
'connections' => [
'mysql' => [
// 数据库表前缀
'prefix' => Env::get('database.prefix', 'zs_'),
]
]
];
field
和 withoutField
返回值field
方法主要作用是标识要返回或者操作的字段,可以用于查询和写入操作。https://www.kancloud.cn/manual/thinkphp6_0/1037542
// field是指定包含哪些字段 参数和table一样,可以是字符串和数组,字符串的话字段名逗号隔开要全部放到引号中
$select = Db::table('boke')->field('id,title')->where('status',1)->select();
print_r($select);
$select = Db::table('boke')->field('id,title as t')->where('status',1)->select();
print_r($select);
$select = Db::table('boke')->field(['id','title'])->where('status',1)->select();
print_r($select);
$select = Db::table('boke')->field(['id','title'=>'t'])->where('status',1)->select();
print_r($select);
// *号表示查询所有字段,默认不写就是全部字段
$select = Db::table('boke')->field('*')->where('status',1)->select();
print_r($select);
// withoutField是指定除了哪些字段不查询
$select = Db::table('boke')->withoutField('id,title')->where('status',1)->select();
print_r($select);
$select = Db::table('boke')->withoutField(['id','title'])->where('status',1)->select();
print_r($select);
order
排序https://www.kancloud.cn/manual/thinkphp6_0/1037546
asc
ASC
正序 默认desc
DESC
倒序
$select = Db::table('boke')->field('id,title')->where('status',1)->order('id')->select();
print_r($select);
$select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->select();
print_r($select);
page
和 limit
翻页limit
方法主要用于指定查询和操作的数量https://www.kancloud.cn/manual/thinkphp6_0/1037544
https://www.kancloud.cn/manual/thinkphp6_0/1037545
// 从第一条开始取出五条
$select = Db::table('boke')
->field('id,title')
->where('status',1)
->order('id desc')
->limit(5)
->select();
print_r($select);
// 从第六条开始取出五条
$select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->limit(6,5)->select();
print_r($select);
// 第一页五条
$select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->page(1,5)->select();
print_r($select);
// 第二页五条
$select = Db::table('boke')->field('id,title')->where('status',1)->order('id desc')->page(1,5)->select();
print_r($select);
$content = Db::name('boke')->field('id,title')->page(input('get.page','1'),3)->select()->toArray();
print_r($content);
count
统计数量
// 统计状态为1的数据条数
$count = Db::table('boke')->field('id,title')->where('status',1)->count();
echo $count;
save
写入数据save
方法统一写入数据,自动判断是新增还是更新数据(以写入数据中是否存在主键数据为依据)。
public function index(){
# 添加数据
$data = ['cat'=>'2','title'=>'美特斯邦威七分牛仔裤女2018夏季新款中腰修身洗水牛仔裤商场款','price'=>'49.90','add_time'=>time()];
$save = Db::table('shop_goods')->save($data);
print_r($save);
# 因为主键是唯一的且自增的,数据中包含主键为修改该条记录,没有默认为添加记录
# 修改数据
$data = ['price'=>'99.00','id'=>3];
$save = Db::table('shop_goods')->save($data);
print_r($save);
}
更多请查看:https://www.kancloud.cn/manual/thinkphp6_0/1037538
系统支持的链式操作方法包含:
连贯操作 | 作用 | 支持的参数类型 |
---|---|---|
where* | 用于AND查询 | 字符串、数组和对象 |
whereOr* | 用于OR查询 | 字符串、数组和对象 |
whereTime* | 用于时间日期的快捷查询 | 字符串 |
table | 用于定义要操作的数据表名称 | 字符串和数组 |
alias | 用于给当前数据表定义别名 | 字符串 |
field* | 用于定义要查询的字段(支持字段排除) | 字符串和数组 |
order* | 用于对结果排序 | 字符串和数组 |
limit | 用于限制查询结果数量 | 字符串和数字 |
page | 用于查询分页(内部会转换成limit) | 字符串和数字 |
group | 用于对查询的group支持 | 字符串 |
having | 用于对查询的having支持 | 字符串 |
join* | 用于对查询的join支持 | 字符串和数组 |
union* | 用于对查询的union支持 | 字符串、数组和对象 |
view* | 用于视图查询 | 字符串、数组 |
distinct | 用于查询的distinct支持 | 布尔值 |
lock | 用于数据库的锁机制 | 布尔值 |
cache | 用于查询缓存 | 支持多个参数 |
with* | 用于关联预载入 | 字符串、数组 |
bind* | 用于数据绑定操作 | 数组或多个参数 |
comment | 用于SQL注释 | 字符串 |
force | 用于数据集的强制索引 | 字符串 |
master | 用于设置主服务器读取数据 | 布尔值 |
strict | 用于设置是否严格检测字段名是否存在 | 布尔值 |
sequence | 用于设置Pgsql的自增序列名 | 字符串 |
failException | 用于设置没有查询到数据是否抛出异常 | 布尔值 |
partition | 用于设置分区信息 | 数组 字符串 |
replace | 用于设置使用REPLACE方式写入 | 布尔值 |
extra | 用于设置额外查询规则 | 字符串 |
duplicate | 用于设置DUPLCATE信息 | 数组 字符串 |
所有的连贯操作都返回当前的模型实例对象(this),其中带*标识的表示支持多次调用。
方法 | 描述 |
---|---|
toArray | 转换为数组 |
isEmpty | 是否为空 |
all | 所有数据 |
merge | 合并其它数据 |
diff | 比较数组,返回差集 |
flip | 交换数据中的键和值 |
intersect | 比较数组,返回交集 |
keys | 返回数据中的所有键名 |
pop | 删除数据中的最后一个元素 |
shift | 删除数据中的第一个元素 |
unshift | 在数据开头插入一个元素 |
push | 在结尾插入一个元素 |
reduce | 通过使用用户自定义函数,以字符串返回数组 |
reverse | 数据倒序重排 |
chunk | 数据分隔为多个数据块 |
each | 给数据的每个元素执行回调 |
filter | 用回调函数过滤数据中的元素 |
column | 返回数据中的指定列 |
sort | 对数据排序 |
order | 指定字段排序 |
shuffle | 将数据打乱 |
slice | 截取数据中的一部分 |
map | 用回调函数处理数组中的元素 |
where | 根据字段条件过滤数组中的元素 |
whereLike | Like查询过滤元素 |
whereNotLike | Not Like过滤元素 |
whereIn | IN查询过滤数组中的元素 |
whereNotIn | Not IN查询过滤数组中的元素 |
whereBetween | Between查询过滤数组中的元素 |
whereNotBetween | Not Between查询过滤数组中的元素 |
public function index(){
$select = Db::table('shop_goods')->select();
if($select->isEmpty()){
echo '未找到数据';
}
print_r($select->shuffle()->toArray());
}
*
标识的表示支持多次调用连贯操作 | 作用 | 支持的参数类型 |
---|---|---|
where* |
用于 AND 查询 | 字符串、数组和对象 |
table | 用于定义要操作的数据表名称 | 字符串和数组 |
name | 用于定义要操作的数据表名称 | 字符串 |
field* |
用于定义要查询的字段(支持字段排除) | 字符串和数组 |
order* |
用于对结果排序 | 字符串和数组 |
limit | 用于限制查询结果数量 | 字符串和数字 |
page | 用于查询分页(内部会转换成 limit) | 字符串和数字 |
<?php
namespace app\controller;
use app\BaseController;
use think\facade\View;
use think\facade\App;
use think\facade\Db;
class Index extends BaseController
{
public function index()
{
$p = input('get.p',1);
$c = input('get.c',0);
$t = input('get.t','');
$num = 5;
$cat = Db::table('cat')->select();
if($c != 0){
$count = Db::table('boke')->where('status',1)->where('cat',$c)->count();
$select = Db::table('boke')->where('status',1)->where('cat',$c)->page($p,$num)->select()->toArray();
}else if(!empty($t)){
$count = Db::table('boke')->where('status',1)->where('title',$t)->count();
$select = Db::table('boke')->where('status',1)->where('title',$t)->page($p,$num)->select()->toArray();
}else{
$count = Db::table('boke')->where('status',1)->count();
$select = Db::table('boke')->where('status',1)->page($p,$num)->select()->toArray();
}
foreach ($select as &$value) {
$catname = Db::table('cat')->field('name')->where('id',$value['cat'])->find();
$value['cat'] = $catname['name'];
}
$hot = Db::table('boke')->field('title')->limit(4)->order('num','asc')->select();
View::assign([
'p' => $p,
'c' => $c,
't' => $t,
'cat' => $cat,
'select' => $select,
'count' => ceil($count/$num),
'hot' => $hot
]);
return View::fetch('index');
}
}
view 首页文件
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页 - zhang个人博客</title>
<meta name="keywords" content="博客,个人博客,zhang个人博客,PHP"/>
<meta name="description" content="zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。" />
<link rel="stylesheet" id="twentytwelve-style-css" href="/static/css/index.css" type="text/css" media="all" />
<style type="text/css" id="custom-background-css">
body.custom-background {background-color:#e6e6e6;}
input.btn-default:focus,input.no-border:focus {outline:none;}
input.no-border {font-size:15px;}
</style>
<script type="text/javascript" src="/static/js/jquery.js"></script>
<script type="text/javascript" src="/static/js/nav.js"></script>
</head>
<body class="home blog custom-background custom-font-enabled single-author">
<div id="page" class="hfeed site">
<header id="masthead" class="site-header" role="banner">
<hgroup>
<h1 class="site-title">
<a href="/" title="zhang个人博客" rel="home">zhang个人博客</a>
</h1>
<!-- <h2 class="site-description">zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。</h2> -->
</hgroup>
<nav id="site-navigation" class="main-navigation" role="navigation">
<ul class="nav-menu">
<li>
<a href="/">首页</a>
</li>
{if($cat)}
{foreach $cat as $cat_v}
<li>
<a href="?c={$cat_v['id']}">{$cat_v['name']}</a>
</li>
{/foreach}
{/if}
</ul>
</nav>
</header>
<div id="main" class="wrapper">
<div id="primary" class="site-content">
{empty name="$select"}
<div>该分类占无内容……</div>
{else/}
{foreach($select as $select_v)}
<div id="content" role="main">
<article>
<header class="entry-header">
<h1 class="entry-title"><a href="/Content/details?id={$select_v['id']}" title="构建Nginx和PHP镜像" rel="bookmark">{$select_v['title']}</a></h1>
</header>
<div class="entry-content">{$select_v['content']}……</div>
<footer class="entry-meta">
发布于
<a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
<time class="entry-date" datetime="2020-10-02">{$select_v['date']}</time>
</a>。 属于
<a href="/index.html?c=4" title="查看 Linux中的全部文章" rel="category">{$select_v['cat']}</a> 分类
</footer>
</article>
</div>
{/foreach}
{/empty}
<div class="page">
<nav>
<ul class="pagination">
{if $p<=1}
<li class="page-item disabled" aria-disabled="true" aria-label="« 上一页">
<span class="page-link" aria-hidden="true">‹</span>
</li>
{else /}
<li class="page-item">
<a class="page-link" href="?p={$p-1}&c={$c}&t={$t}" rel="next" aria-label="上一页 ‹">‹</a>
</li>
{/if}
{if $p>=$count}
<li class="page-item disabled" aria-disabled="true" aria-label="» 下一页">
<span class="page-link" aria-hidden="true">»</span>
</li>
{else /}
<li class="page-item">
<a class="page-link" href="?p={$p+1}&c={$c}&t={$t}" rel="next" aria-label="下一页 »">›</a>
</li>
{/if}
</ul>
</nav>
</div>
</div>
<div id="secondary" class="widget-area" role="complementary">
<aside id="search-2" class="widget widget_search">
<form role="search" id="searchform" action="" method="POST">
<div>
<label class="screen-reader-text" for="t">搜索:</label>
<input placeholder="搜索" type="text" class="no-border" name="keywords" id="t" value="{$t}" />
<input type="submit" class="btn btn-default" id="searchsubmit" value="搜索" />
</div>
</form>
<script type="text/javascript">
$(function (){
$("#searchsubmit").click(function (){
if($("#t").val() != '') {
location.href = "/index.html?t="+$("#t").val();
}
return false;
});
});
</script>
</aside>
<aside id="recent-posts-2" class="widget widget_recent_entries">
<h3 class="widget-title">热门文章</h3>
<ul>
{foreach $hot as $k=>$v}
<li>
<font style="color:#7a7a7a;">[{$k+1}]</font>
<a href="/Content/details?id={$v['id']}" title="12">{$v['title']}</a>
</li>
{/foreach}
</ul>
</aside>
</div>
</div>
<footer id="colophon" role="contentinfo">
<div class="site-info">
<span>友情链接:</span>
<a href="https://www.php.cn" target="_blank">PHP中文网</a>
</div>
</footer>
<footer role="contentinfo" style="margin-top:0;">
<div class="site-info" style="text-align:center;">
<span>
<a href="https://beian.miit.gov.cn" target="_blank">苏ICP备2020058653号-1</a>
</span>
</div>
</footer>
</div>
</body>
</html>
controller\Content.php 详情页
<?php
namespace app\controller;
use app\BaseController;
use think\facade\View;
use think\facade\Db;
class Content extends BaseController
{
public function details()
{
$id = input('get.id');
$content = Db::table('boke')->field('content,title')->where('id',$id)->find();
$s = Db::table('boke')->field('title')->where('id',$id-1)->find();
$x = Db::table('boke')->field('title')->where('id',$id+1)->find();
$cat = Db::table('cat')->select();
$hot = Db::table('boke')->field('id,title')->limit(4)->order('num','asc')->select();
View::assign([
'id' => $id,
'cat' => $cat,
'hot' => $hot,
'content'=>$content,
's'=>$s,
'x'=>$x
]);
return View::fetch();
}
}
view\Content\details.html 文章详情页
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页 - zhang个人博客</title>
<meta name="keywords" content="博客,个人博客,zhang个人博客,PHP"/>
<meta name="description" content="zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。" />
<link rel="stylesheet" id="twentytwelve-style-css" href="/static/css/index.css" type="text/css" media="all" />
<style type="text/css" id="custom-background-css">
body.custom-background {background-color:#e6e6e6;}
input.btn-default:focus,input.no-border:focus {outline:none;}
input.no-border {font-size:15px;}
</style>
<script type="text/javascript" src="/static/js/jquery.js"></script>
<script type="text/javascript" src="/static/js/nav.js"></script>
</head>
<body class="home blog custom-background custom-font-enabled single-author">
<div id="page" class="hfeed site">
<header id="masthead" class="site-header" role="banner">
<hgroup>
<h1 class="site-title">
<a href="/" title="zhang个人博客" rel="home">zhang个人博客</a>
</h1>
<!-- <h2 class="site-description">zhang是php开发路上的学习萌萌新,愿意把知识分享给大家。</h2> -->
</hgroup>
<nav id="site-navigation" class="main-navigation" role="navigation">
<ul class="nav-menu">
<li>
<a href="/index.html">首页</a>
</li>
{if($cat)}
{foreach $cat as $cat_v}
<li>
<a href="/?c={$cat_v['id']}">{$cat_v['name']}</a>
</li>
{/foreach}
{/if}
</ul>
</nav>
</header>
<div id="main" class="wrapper">
<div id="primary" class="site-content">
<div id="content" role="main">
<article>
<header class="entry-header">
<h1 class="entry-title">
{$content['title']}
</h1>
</header>
<div class="entry-content ql-editor" id="md-editor" style="padding: 0;">
{$content['content']}
</div>
<footer class="entry-meta">
发布于
<a href="/index.html?time=2020-10-02" title="2020-10-02" rel="bookmark">
<time class="entry-date" datetime="2020-10-02">2020-10-02</time>
</a>。 属于
<a href="/index.html?cate=4" title="查看 Linux中的全部文章" rel="category">Linux</a> 分类
</footer>
</article>
<nav class="nav-single">
<div class="prev">上一篇:<a href="/Content/details?id={$id-1}">{$s['title']}</a></div>
<div class="prev">下一篇:<a href="/Content/details?id={$id+1}">{$x['title']}</a></div>
</nav>
</div>
</div>
<div id="secondary" class="widget-area" role="complementary">
<aside id="search-2" class="widget widget_search">
<form role="search" id="searchform" action="" method="POST">
<div>
<label class="screen-reader-text" for="t">搜索:</label>
<input placeholder="搜索" type="text" class="no-border" name="keywords" id="t" value="{$t}" />
<input type="submit" class="btn btn-default" id="searchsubmit" value="搜索" />
</div>
</form>
</aside>
<aside id="recent-posts-2" class="widget widget_recent_entries">
<h3 class="widget-title">热门文章</h3>
<ul>
{foreach $hot as $k=>$v}
<li>
<font style="color:#7a7a7a;">[{$k+1}]</font>
<a href="/Content/details?id={$v['id']}" title="12">{$v['title']}</a>
</li>
{/foreach}
</ul>
</aside>
</div>
</div>
<footer id="colophon" role="contentinfo">
<div class="site-info">
<span>友情链接:</span>
<a href="https://www.php.cn" target="_blank">PHP中文网</a>
</div>
</footer>
<footer role="contentinfo" style="margin-top:0;">
<div class="site-info" style="text-align:center;">
<span>
<a href="https://beian.miit.gov.cn" target="_blank">苏ICP备2020058653号-1</a>
</span>
</div>
</footer>
</div>
</body>
</html>
最近朋友圈里火了好多好玩的小玩意,小编看到后立马给大家更新了!这次带来了三个超级好玩的功能游戏机、小空调和小电视。
本人朋友圈已安装
小空调:https://h5ma.com/11c