視頻學習筆錄---ThinkPHP---thinkphp視圖
(1)什麽是視圖?
MVC中的V(view),主要負責信息的輸出展示
(2)視圖的創建?
創建位置:分組目錄Home下的View目錄下指定的控制器名目錄中,然後將模板綁定到控制器的方法中,一個公共控制器中可以綁定多個模板
註意:位置問題,控制器同名
①位置是view下與控制器同名的目錄中;view下一級目錄為控制器,二級目錄為方法(對應的模板文件)
②如果有多個模板文件,則按照上面要求進行創建
(3)視圖的展示?
在smarty中展示模板用的display方法,在ThinkPHP裏同樣是display方法
display在ThinkPHP中的3種語法格式:
①$this->display(); 展示當前控制器下與當前請求方法名一致的模板文件
②$this->display(模板文件名--不帶後綴); 展示當前控制器下指定模板文件
③$this->display(view目錄下目錄名/模板文件名--不帶後綴); 展示指定控制器下的指定模板文件
案例:
<?php namespace Admin\controller; use Think\Controller; class TestController extends Controller{public function test1(){ $this->display(‘Person/person‘);//顯示Person下person.html模板 } } ?>
(4)變量分配
將變量從控制器的方法裏傳遞到模板中展示的過程即為變量分配
在ThinkPHP中系統封裝好了一個變量的分配方法,在smarty中用assign,在ThinkPHP裏也是assign(分配)
語法:$this->assign(‘模板中變量名‘,$php中的變量名);
<?php namespace Admin\controller;use Think\Controller; class TestController extends Controller{ public function test1(){ //不寫date()的第二個參數,則默認為當前時間 $time = date(‘Y-m-d h:i:s‘,time()); $this->assign(‘time‘,$time);//變量的傳遞,接下來是模板文件數據展示 $this->display(); } } ?>
接下來是數據的展示
在smarty裏展示變量,寫在標記裏{!-- --}。在ThinkPHP裏,默認的展示變量方法與smarty類似,{$模板中變量名}
<!DOCTYPE html> <html> <head> <title>test1</title> </head> <body> <p> 現在時間是:{$time} </p> </body> </html>
註意:①模板展示放在變量分配後,否則無法展示變量;②一般情況下兩個參數的變量名是一樣的,方便查找
(5)變量分隔符
ThinkPHP默認變量分隔符為{},可以在配置文件ThinkPHP/Conf/convertion.php裏找到配置項
// 布局設置 ‘TMPL_L_DELIM‘ => ‘{‘, // 模板引擎普通標簽開始標記 ‘TMPL_R_DELIM‘ => ‘}‘, // 模板引擎普通標簽結束標記
左右標記可以通過配置項修改,例如將左標記符改為],則在模板裏的變量需要改為[$time}
(6)模板常量替換機制
①由來:實際開發中,在引入css、js、圖片等文件時,往往需要些一些復雜的路徑。這時可以考慮用模板常量替換機制,將復雜路徑簡單化
②ThinkPHP裏系統默認提供了一下幾個常用的模板常量(因為是模板常量,所以只能在模板中使用,不能在控制器裏使用)
__MODULE__:(模塊/組件),輸出到分組,表示從域名後開始到分組名結束的路由。/index.php/Admin
__CONTROLLER__:(控制),輸出到控制器,/index.php/Admin/Test
__ACTION__:(方法),輸出到方法,/index.php/Admin/Test/test1
__PUBLIC__:表示從域名後開始找,站點根目錄下Public目錄路由,/public
__SELF__:當前路由,從域名後開始到路由結束,與__ACTION__區別:/index.php/Admin/Test/test1/id=10,具體輸出不同。當沒有參數時,__SELF__和__ACTION__相同
③模板常量來源?
這裏模板常量是通過模板內容替換機制來實現的,並非是常量的定義。所以模板常量並非是常量,而是字符串。
替換機制可以查看行為文件ThinkPHP/Library/Behavior/ContentReplace.Behaviour.class.php
拓展:查看後即可得出行為文件命名,文件名.Behaviour.class.php。
/** * 模板內容替換 * @access protected * @param string $content 模板內容 * @return string */ protected function templateContentReplace($content) { // 系統默認的特殊變量替換 $replace = array( ‘__ROOT__‘ => __ROOT__, // 當前網站地址 ‘__APP__‘ => __APP__, // 當前應用地址 ‘__MODULE__‘ => __MODULE__, ‘__ACTION__‘ => __ACTION__, // 當前操作地址 ‘__SELF__‘ => htmlentities(__SELF__), // 當前頁面地址 ‘__CONTROLLER__‘=> __CONTROLLER__, ‘__URL__‘ => __CONTROLLER__, ‘__PUBLIC__‘ => __ROOT__.‘/Public‘,// 站點公共目錄 ); // 允許用戶自定義模板的字符串替換註意:行為文件是系統自帶的,一般不建議去改動 if(is_array(C(‘TMPL_PARSE_STRING‘)) ) $replace = array_merge($replace,C(‘TMPL_PARSE_STRING‘)); $content = str_replace(array_keys($replace),array_values($replace),$content);//這步便是通過模板內容替換機制str_replace return $content;
其模板常量的核心就是字符串的替換str_replace
④自定義模板常量
為了後期使用方便,可以在配置文件裏定義一個自定義的模板常量
配置項為TMPL_PARSE_STRING
註意:開發時盡量不要修改系統配置文件,因為系統配置文件的作用範圍十分廣泛。可以將需要修改的配置項,在分組、應用級別的配置文件裏去定義,不要直接在系統文件裏修改。
例如:放到應用配置文件Common/Conf/config.php
<?php return array( //‘配置項‘=>‘配置值‘ //模板常量 ‘TMPL_PARSE_STRING‘ => array( // __ROOT__.‘/Public‘站點公共目錄,即根目錄下public ‘__ADMIN__‘ => __ROOT__.‘/Public/Admin‘, //定義好之後,可以通過__ADMIN__來訪問靜態資源路徑 ) );
驗證:模板輸入__ADMIN__來驗證,輸出結果為/Public/Admin,表示驗證成功
視頻學習筆錄---ThinkPHP---thinkphp視圖