> ## 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請求和信息方法