> ## SWITCH标签
```
// 用法
{switch name="变量" }
{case value="值1" break="0或1"}输出内容1{/case} // break为0表示不跳出判断,默认值为1
{case value="值2"}输出内容2{/case}
{default /}默认情况
{/switch}
// 使用系统函数和系统变量
{switch name="Think.get.userId|abs"}
{case value="1"}admin{/case}
{default /}default
{/switch}
// 判断多个条件
{switch name="Think.get.type"}
{case value="gif|png|jpg"}图像格式{/case}
{default /}其他格式
{/switch}
// 可以在case的value属性中使用变量,但是使用变量后就不能同时判断多个条件了
{switch $User.userId}
{case $adminId}admin{/case}
{case $memberId}member{/case}
{/switch}
// 简化写法
{switch $User.userId}
{case $adminId}admin{/case}
{case $memberId}member{/case}
{/switch}
```
> ## IF标签
```
// 用法
{if condition="($name == 1) OR ($name > 100) "} value1
{elseif condition="$name eq 2"/}value2
{else /} value3
{/if}
// 在condition中使用php的语法
{if condition="strtoupper($user['name']) neq 'THINKPHP'"}ThinkPHP
{else /} other Framework
{/if}
// 简化用法
{if condition="表达式"}
{if (表达式)}
{if 表达式}
```
> ## 范围判断标签(in、notin、between、notbetween)
```
// 判断变量在某个范围内
{in name="id" value="1,2,3"}
id在范围内
{/in}
-------------------------------------------------------
{between name="id" value="1,10"}
输出内容1
{/between}
// 判断变量不在某个范围内
{notin name="id" value="1,2,3"}
id不在范围内
{/notin}
-------------------------------------------------------
{notbetween name="id" value="1,10"}
输出内容2
{/notbetween}
// 合并判断
{in name="id" value="1,2,3"}
id在范围内
{else/}
id不在范围内
{/in}
-------------------------------------------------------
{between name="id" value="1,10"}
输出内容1
{else/}
输出内容2
{/between}
// name使用系统变量
{in name="Think.get.id" value="1,2,3"}
$_GET['id'] 在范围内
{/in}
-------------------------------------------------------
{between name="Think.post.id" value="1,5"}
输出内容1
{/between}
// value使用系统变量
{in name="id" value="$Think.post.ids"}
id在范围内
{/in}
-------------------------------------------------------
{between name="id" value="$Think.get.range"}
输出内容1
{/between}
// value使用变量(可以是数组,也可以是逗号分隔的字符串)
{in name="id" value="$Think.post.ids"}
id在范围内
{/in}
-------------------------------------------------------
// 可以是数组也可以是字符串,但是只有两个,一个是上限一个是下限
{between name="id" value="$range"}
输出内容1
{/between}
// value只能传入两个参数逗号分隔
{between name="id" value="A,Z"}
输出内容1
{/between}
// 可以用range统一替代上面所有用法
{range name="id" value="1,2,3" type="in"}
输出内容1
{/range}
```
> ## 判断变量是否被赋值标签(present,类似isset)
```
// 变量被赋值
{present name="name"}
name已经赋值
{/present}
// 变量没有被赋值
{notpresent name="name"}
name还没有赋值
{/notpresent}
// 判断变量是否被赋值
{present name="name"}
name已经赋值
{else /}
name还没有赋值
{/present}
// 判断系统变量是否被赋值
{present name="Think.get.name"}
$_GET['name']已经赋值
{/present}
```
> ## 判断变量是否为空标签(empty)
```
// 变量为空
{empty name="name"}
name为空值
{/empty}
// 变量不为空
{notempty name="name"}
name不为空
{/notempty}
// 判断变量是否为空
{empty name="name"}
name为空
{else /}
name不为空
{/empty}
// 判断系统变量是否为空
{empty name="Think.get.name"}
$_GET['name']为空值
{/empty}
```
> ## 判断常量是否被定义(defined)
```
// 常量被定义
{defined name="NAME"}
NAME常量已经定义
{/defined}
// 常量未定义
{notdefined name="NAME"}
NAME常量未定义
{/notdefined}
// 判断常量是否被定义
{defined name="NAME"}
NAME常量已经定义
{else /}
NAME常量未定义
{/defined}
```
- 运行环境需求
- tp5目录结构
- 命令行生成代码
- 路由
- 请求
- 获取请求信息
- 超全局变量获取
- 更改请求变量的值
- 判断是否为某种请求类型
- 伪装表单请求类型
- HTTP头部信息
- 伪静态
- 向请求对象中注入自定义的属性和方法
- 简单的传参可以使用参数绑定
- 依赖注入(将对象注入方法作为参数)
- 将请求的数据进行缓存
- 控制器
- 一个控制器代码示例
- 空控制器
- 资源控制器
- 模型
- 一个模型代码示例
- 模型的四种调用方法
- 控制器中调用模型添加数据
- 控制器中调用模型更新数据
- 控制器中调用模型删除数据
- 控制器中调用模型查询数据
- 模型中使用聚合函数
- 获取器
- 修改器
- 自动写入时间戳
- 只读字段
- 软删除
- 自动类型转换
- 数据自动完成
- 查询范围
- 数组方式访问和转换为数组
- json序列化
- 模型的事件
- 关联模型
- 一对一关联
- 一对多关联
- 远程一对多(跨表关联)
- 多对多关联
- 多态关联
- 关联预载入N+1次查询变2次
- 延迟预载入
- 关联统计
- 视图与模板
- 模板引擎配置
- 分配数据到模板
- 输出替换
- 模板中输出变量
- 模板中输出系统变量(配置常量超全局)
- 模板中输出请求信息
- 模板中使用php函数
- 输出到模板中的变量指定默认值
- 模板中进行运算
- 原样输出代码不解析
- 模版中注释
- 模板布局与继承
- 文件包含
- 内置标签
- 循环输出标签
- 比较标签
- 条件判断标签
- 引入资源文件(js-css)
- 使用原生php
- 在模板中定义变量和常量
- 助手函数
- 常用功能
- 表单验证
- 验证器的定义
- 自定义验证规则
- 速查表
- 系统默认根命名空间
- 系统路径常量
- 请求变量
- URL请求和信息方法