1. 程式人生 > >視頻學習筆錄---ThinkPHP---thinkphp視圖

視頻學習筆錄---ThinkPHP---thinkphp視圖

doc html模板 .html 請求方法 引擎 AR 視頻 接下來 blog

(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視圖