Thinkphp6——基础与视图

Thinkphp6——基础与视图篇

  • ThinkPHP支持传统的MVC(Model-View-Controller)模式以及流行的MVVM(Model-View-ViewModel)模式的应用开发

一、MVC

  • MVC 软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller)
  • ThinkPHP 是一个典型的 MVC 架构

控制器 - 负责转发请求,对请求进行处理。
视图 - 界面设计人员进行图形界面设计。
模型 - 程序员编写程序应有的功能(实现算法等等)、数据库专家进行数据管理和数据库设计(可以实现具体的功能)。

mvc

二、单应用模式访问

index.php 入口文件,在tp6/public目录下
index 控制器
index 操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
├─app           应用目录
│ ├─controller 控制器目录
│ ├─model 模型目录
│ ├─ ... 更多类库目录
│ │
│ ├─common.php 公共函数文件
│ └─event.php 事件定义文件

├─config 配置目录
│ ├─app.php 应用配置
│ ├─cache.php 缓存配置
│ ├─console.php 控制台配置
│ ├─cookie.php Cookie配置
│ ├─database.php 数据库配置
│ ├─filesystem.php 文件磁盘配置
│ ├─lang.php 多语言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中间件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 视图配置

├─view 视图目录
├─route 路由定义目录
│ ├─route.php 路由定义文件
│ └─ ...

├─public WEB目录(对外访问目录)
│ ├─index.php 入口文件
│ ├─router.php 快速测试文件
│ └─.htaccess 用于apache的重写

├─extend 扩展类库目录
├─runtime 应用的运行时目录(可写,可定制)
├─vendor Composer类库目录
├─.example.env 环境变量示例文件
├─composer.json composer 定义文件
├─LICENSE.txt 授权说明文件
├─README.md README 文件
├─think 命令行入口文件

三、安装视图

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

composer require topthink/think-view

  • 视图目录可以在根目录,也可以在app应用目录

四、模版渲染

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

controller代码

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

图片1

  • 注:一个控制器的类对应一个view视图的目录,这个类中的方法,对应这个目录中的html页面

五、模版变量

  • 在控制器中使用assign 方法给全局变量赋值,这个变量也叫作模板变量
    注:要区分模板和模型的概念
  • 在视图页面中使用 {$name}输出模板变量值

controller代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
namespace app\controller;
use think\facade\View;
class Index{
public function index(){
// 模板变量赋值
View::assign('name','欧阳克');
View::assign('email','oyk@php.cn');
// 或者批量赋值
View::assign([
'name' => 'Roy',
'email' => 'szsplyr@163.com'
]);
// 模板输出
return View::fetch();
}
}

view代码

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

六、模板引擎

  • 我们在页面中使用{$var}输出变量,还可以借助标签,实现更多的功能。

  • 模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的。

    标签类型 描述
    普通标签 主要用于输出变量、函数过滤和做一些基本的运算操作
    XML标签 也称为标签库标签,主要完成一些逻辑判断、控制和循环输出,并且可扩展

普通标签

运算符

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

view文件

1
2
3
4
5
6
7
8
9
10
<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>

模版函数

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

view文件

1
2
3
4
5
6
7
8
9
10
<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>
<div>{$str|md5}</div>
<div>{$str|lower|substr=0,3}</div>
  • 注:$var|后面接函数


XML标签

foreach循环标签

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

    view文件

    1
    2
    3
    4
    5
    6
    {foreach $arr as $v}
    <div>
    <span>ID:{$v['id']}</span>
    <span>姓名:{$v['name']}</span>
    </div>
    {/foreach}

volist循环标签

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

view文件

1
2
3
4
5
6
7
{volist name="arr" id="v" key="k"  offset="1" length="2"}
<div>
<span>ID:{$v['id']}</span>
<span>姓名:{$v['name']}</span>
<span>下标:{$k}</span>
</div>
{/volist}

if 判断标签

view文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
{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>
{/if}

switch 判断标签

view文件

1
2
3
4
5
6
7
{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}

包含文件

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

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

1
2
3
4
5
6
7
{include file="public/header" /}
{include file="public/left" /}

{load href="/static/layui/css/layui.css" /}
{load href="/static/layui/layui.js" /}

{include file="public/tail" /}

其他标签

  • 条件标签
标签 描述
in 判断变量是否存在某些值
notin 判断变量是否不存在某些值
between 判断变量是否存在某些值
notbetween 判断变量是否不存在某些范围值
present 判断某个变量是否 已定义
notpresent 判断某个变量是否 未定义
empty 判断某个变量是否为空
notempty 判断某个变量是否不为空
defined 判断某个常量是否 已定义
notdefined 判断某个常量是否 未定义
  • 比较标签
标签 描述
eq 等于
neq 不等于
gt 大于
egt 大于等于
lt 小于
elt 小于等于
heq 恒等于
nheq 不恒等于
  • 循环标签
标签 描述
for 计数循环
  • 杂项标签
标签 描述
literal 原样输出
php 使用原生php代码

注:别担心,孰能生巧!

------ ���Ľ���------