ThinkPHP 5.0--基礎(chǔ)篇****(視圖和模版)
一赚楚、視圖view
i. 主要展示界面 可以接受用戶輸入等操作 通常是一個html頁面
ii. 助手函數(shù) view()
如果沒有對模版進(jìn)行配置(沒有在配置文件中修改 )默認(rèn)調(diào)用 當(dāng)前模塊/view/當(dāng)前控制器/當(dāng)前方法名.html
- view() 傳遞一個參數(shù)之后 return view(‘a(chǎn)’) ;
- 傳遞一個帶路徑的參數(shù) return view(‘config/a’) ;
- 傳遞路徑 ./ return view(‘./a.html’) ; public/index.php入口文件 ./同級 此種寫法 必須加上后綴 .html
- View()助手函數(shù) 傳遞兩個參數(shù)
- view()助手函數(shù)的第三個參數(shù) 替換
- 總結(jié):使用助手函數(shù)很方便 但是有隱患 如 同名函數(shù)覆蓋 一些配置失效等等
iii. return $this->fetch() 傳遞三個參數(shù) 使用方法同上 (use think\Controller) extends Controller
iv. 使用$this->assign(‘’,’’) 傳遞變量
v. $this->display(‘串’) 與模版沒有關(guān)系
$this->assign(‘a(chǎn)’,’123’) ; $this->fetch(‘index.html’) 將變量傳遞到模版index.html
vi. $this->assign(‘a(chǎn)’,’123’) ; 也可以向$this->display(‘字符串{$a}’)中傳遞變量
二、模版變量輸出 替換 賦值
i. 經(jīng)過php編譯器解析 模版文件最終 編譯成.php文件 輸出 runtime/temp
ii. 模版語法 {} 以花括號開始結(jié)束標(biāo)記 慣例配置(thinkphp/convention.php) ---【詳情參見 配置篇】
- 拷貝到應(yīng)用配置文件中 測試 (conf/config.php)
- 配置這兩個選項的場景: 程序中使用了 Vue.js|AngularJS|Angular2...這樣的前端框架 很有可能和模版沖突 就需要修改此處的 開始 結(jié)束標(biāo)記
iii. 變量輸出---模版中{$a} 變量和開始|結(jié)束標(biāo)記之間 不能有空格{ $a }
iv. 變量賦值---向模版文件中輸出變量
- fetch(‘’,[])的第二個參數(shù) 數(shù)組類型
- assign(‘’,’’) key=>value類型
- view方法 繼承Controller之后 key=>value
- share靜態(tài)方法 ThinkPHP5.0.4 之后
- 上述四種方法 可同時有效
v. 替換
fetch(‘’,[],[‘ABC’=>’頁面上的ABC替換成此內(nèi)容’])第三個參數(shù)
-
修改配置文件 thinkphp/convention.php
// 視圖輸出字符串內(nèi)容替換
'view_replace_str' => [],
a) 在應(yīng)用配置文件中修改配置
b) 多個模塊的時候 可以使用擴展配置 分模塊配置 ---【詳情參見 配置篇】
i. 傳統(tǒng)
ii. 潮流
林子大了 鳥多了 維護起來更方便 逼格高骗卜!
thinkphp\library\think\View.php 默認(rèn)配置
- 優(yōu)先級 同配置優(yōu)先級 方法>控制器>擴展>應(yīng)用>慣例 【詳情參見 配置篇】 這個配置上傳下載目錄 尤其明顯
三宠页、系統(tǒng)變量原生標(biāo)簽
i. 模版中使用系統(tǒng)變量
ii. 使用系統(tǒng)變量 獲取當(dāng)前用戶 服務(wù)器信息 配置信息等等
iii. 模版文件中也可以使用 php原生標(biāo)簽
可以用但是不推薦使用 混編 不利于維護 最好前后臺代碼分離 前臺展示數(shù)據(jù) 后臺處理數(shù)據(jù)
四、變量輸出調(diào)節(jié)器
i. 在模版中使用函數(shù) md5()加密 substr() 截串 date() 格式化
ii. 數(shù)值運算 自增 自減
iii. default 定義默認(rèn)值
iv. {literal}中間的內(nèi)容不會被編譯 原樣輸出{/literal}
v. 注釋
頁面上不顯示 查看源代碼能看到
{/* 模版注釋 */} 頁面不顯示 查看源代碼看不到
五寇仓、模版循環(huán)標(biāo)簽
i. volist標(biāo)簽通常用于查詢數(shù)據(jù)集(select方法)的結(jié)果輸出举户,通常模型的select方法返回的結(jié)果是一個二維數(shù)組,可以直接使用volist標(biāo)簽進(jìn)行輸出遍烦。
- 默認(rèn) 迭代器遍歷數(shù)組中所有數(shù)據(jù)
a) 在控制器中首先對模版賦值:
b) 在模版定義如下俭嘁,循環(huán)輸出用戶的編號和姓名:
c) name屬性:當(dāng)前模板賦值的變量名稱,
Id:表示當(dāng)前的循環(huán)變量服猪,可以隨意指定 v|k|data...
- 查詢結(jié)果中的部分?jǐn)?shù)據(jù)供填,
a) 輸出5~15條記錄
b) 輸出偶數(shù)記錄
- 可傳入的參數(shù):
a) offset: offset=’5’ 從第五條記錄開始遍歷
b) length: 遍歷的長度(當(dāng)前循環(huán)的次數(shù))
c) mod: 對當(dāng)前循環(huán)次數(shù)取余
d) empty: empty=”暫時沒有數(shù)據(jù)” 支持變量輸出
e) key: 數(shù)組索引 直接使用$i|$key即可 或者指定key屬性 key=’s’ 用$s 獲取索引
ii. foreach 類似于volist 沒有太多額外屬性
- 最簡單
- 也可以用name:數(shù)據(jù)源 item:循環(huán)變量指定
- 直接 $key 輸出索引 或者 key=’k’ $k獲取當(dāng)前索引
iii. for循環(huán)
- 開始值、結(jié)束值罢猪、步進(jìn)值和循環(huán)變量都可以支持變量近她,開始值和結(jié)束值是必須,其他是可選膳帕。comparison 的默認(rèn)值是lt粘捎,name的默認(rèn)值是i,步進(jìn)值的默認(rèn)值是1
- 解析之后
六危彩、比較標(biāo)簽
i. eq|equal|nequal|notequal 相等|不等
ii. gt|lt 大于|小于
iii. egt|elt 大于等于|小于等于同理
iv. 以上比較是變量(name=’X’) 和一個數(shù)值的比較 變量和變量的比較 value=”$b” 其他同理
七攒磨、條件判斷標(biāo)簽
i. Switch標(biāo)簽
- 語法:
- 如:
- name:可以使用函數(shù)以及系統(tǒng)變量 name=”Think.get.sid|abs”
case的value屬性支持多個條件判斷 |分割
{case value=”gif|png|jpg”}圖片格式{/case}
也可以使用變量 是用變量不支持多個條件判斷
默認(rèn)case會自動添加break 如果不要break
- 簡單用法:
ii. if標(biāo)簽
- 語法:
- condotion屬性:
a) 使用php代碼
condition="strtoupper($user['name']) neq 'THINKPHP'"
b) 支持點|對象語法
condition="$user.name neq 'ThinkPHP'"
condition="$user:name neq 'ThinkPHP'"
c) 簡單用法
d) 三種寫法 結(jié)果是一樣的
iii. in | notin |between |notbetween 判斷變量是否在某個范圍
- Value可用變量 $range可以是數(shù)組 也可以是以逗號分割的字符串 value也可以是系統(tǒng)變量
- Between同理 value代表區(qū)間 傳入兩個值,(系統(tǒng))變量|數(shù)組
iv. range
- 語法:
- 其中type屬性的值可以用in/notin/between/notbetween,其它屬性的用法和IN或者BETWEEN一致恬砂。
v. Defined常量是否定義
- 語法:
- name:屬性值 嚴(yán)格大小寫
八咧纠、模版的布局 包含和繼承
i. 包含 模版引入 include
ii. 繼承
定義base.html 作為父模版(基板)文件
其他模版文件繼承
- 在基板文件中 刨坑
- 在其他 繼承基板的文件中 填土
坑可以有多個 但是給坑起的名字不能一樣 否則就填錯土了
填坑的時候 可以在基板的基礎(chǔ)上填(繼承基板坑里面的內(nèi)容)
{block} 基板這個坑里面的東西
iii. 布局 layout
- 應(yīng)用配置 conf/config.php 模版配置'template' => [] ;里面新增配置
- 開啟layout之后 fetch()默認(rèn)查找的是 view/layout.html (文件名對應(yīng) layout_name)
- 定義base.html(基板文件) --替換內(nèi)容的地方 只挖了一個坑
- 其他模版文件 不需要繼承直接輸出 替換的就是{CONTENT}的內(nèi)容 填坑
想挖更多的坑 在layout.html中{$a} {$b}變量的形式接收
在其他模版文件中 $this->assign(‘a(chǎn)’,’XXX’) ; $this->assign(‘b’,’XXX’);即可
iv. 什么情況下用繼承|布局 視情況而定吧