ThinkPHP

thinkphp

介紹

1.什麼是框架

    - 特徵1 : 一堆代碼的集合
    - 特徵2 : 一個半成品應用
    - 特徵3 :包含了一些優秀的設計模式

2.爲什麼要使用框架
- 不使用框架的弊端


- 每個人代碼風格不一樣,不便於開發和後期維護
-  一小處的修改,會牽扯出很多地方的修改
- 在後期滿足客戶需求(功能拓展)存在侷限性

  • 使用框架的好處
- 使用框架會幫助我們簡單快速高效的開發項目
- 可以然能給我們有更多時間專注於業務邏輯的開發,不需要關注底層架構
- 便於處理多人協作開發中遇到的問題

3 常見的框架
- Zend Framework
是重量級框架,是php語言公司觸屏的官方框架,比較臃腫,啓動較慢
- YII
美國華人開發,外企應用比較多
- Symfony
重量級 國外框架
- Laravel
輕量級 國外框架
- Codelgniter
輕量級框架,簡稱CI框架,代碼火焰。國外框架
- ThinkPhp
是一款國人開發的框架。國內普遍。適合入門級
- ……..

4.MVC
- 什麼是MVC
MVC是一種設計模式。他是將用戶的輸入、輸出、邏輯相分離,將整個項目分爲三個部分:
- 控制器(controller)
- 模型(Model)
- 視圖(View)

======================

ThinkPHP 框架

下載步驟

第一步:
- 目錄結構

第二步:下載經典的3.2.3版本
- 目錄結構

第二步:自行解壓

=============================================

目錄結構

最外面的總體結構

  • 目錄結構

Aplication目錄下面的文件

  • 目錄結構

Thinkphp目錄下面的文件

目錄結構
目錄結構

Thinkphp –> config目錄下面的文件

目錄結構

注意:
  • convention.php 是系統級別的配置文件。另外還有應用級別和分組級別的配置文件

  • 作用範圍上:

    • > 系統>應用>分組
  • 優先級上:

    • > 分組>應用>系統

thinkphp_3.2.3_full\ThinkPHP\Library\Think目錄下

目錄結構

部署(重點)

1.配置站點目錄
目錄結構

2.配置Apache虛擬主機的配置文件,創建一個虛擬主機
- 文件目錄 :apache\conf\extra\httpd-vhosts.conf
- 步驟:
- 將之前的一段站點配置代碼複製 進行修改
目錄結構
2.重啓Apache
3.修改host文件,將配置文件中申明的兩個域名做一下綁定(解析)
- #### host文件位置:C:\Windows\System32\drivers\etc\hosts

————-
- #### 快速找到位置
- 1.運行 drives
- 2.運行 to hosts
————-
- #### 添加域名綁定解析


  • 看是否綁定成功 在cmd中使用ping命令


  • 在瀏覽器中查看(下圖表示成功)


  • 將代碼文件複製到站點目錄中

    -(如:將thinkPHP裏面的文件複製進去)爲了一步步學習thinkPHP特性,我們只複製兩個文件,如下圖


  • 再次通過瀏覽器查看


  • ### 打開站點目錄,會發現多了一個Application目錄。(剛剛並沒有複製進去)

  • #### 生成的Application和thinkphp解壓包解壓出來的Application不一樣

  • ### Common目錄下

細節問題

  • ### 自動生成
    • 在首次運行index.php入口文件時會自動生成相應的目錄。目錄的名字取決於在index.php定義的常量APP_PATH

      • 如果改變的話,就會生成相應的目錄。
        ————-
  • 目錄安全文件

    • 在自動生成的目錄下都會有一個空白的html文件,文件名叫做index.html.這就叫做目錄安全文件
    • 作用:
      • 隱藏目錄結構,保證安全

  • 默認訪問

    • 默認分組/平臺:Home
    • 默認控制器:index
    • 默認方法:index()
      可以在系統配置文件中找到:WWW\thinkPHP-learning\ThinkPHP\Conf

thinkPHP中控制器

  • 控制器創建

    • 命名規則: 控制器名(英文首字母大寫)+Controller+.class.php

      • 例如:

        UserController.class.php

        <?php
        
        #聲明命名控件
        
        namespace Home\Controller;
        
        #引入父類控制器
        
        use Think\Controller;
        
        #聲明控制器(類)並且繼承父類
        
        class UserController extends Controller {
          public function test(){    
          }
        } ?> 
    • 命名空間聲明和使用必須和目錄掛鉤

    • 完善 測試UserController.class.php

      ruby
      <?php
      #聲明命名控件
      namespace Home\Controller;
      #引入父類控制器
      use Think\Controller;
      #聲明控制器(類)並且繼承父類
      class UserController extends Controller {
      public function test(){
      echo "測試UserController.class.php成功";
      }
      }

  - 根據需要,後期可添加控制器     

路由形式(重點)

路由:是指訪問項中具體某個方法的URL地址

四種路由形式

  • 普通形式路由(get形式路由) (get-2k; post-8M)

    http://網址/入口文件?m=分組名&c=控制器名&a=方法名&參數名=參數值
    例如訪問上述控制器的方法,並且傳遞一個參數 id = 1:
    http://www.xingheng.com/index.php?m=Home&c=User&a=test&id=1

- 缺點:在URL暴露參數,不安全

  • Pathinfo形式路由
    • PATHINFO模式是系統的默認URL模式,提供了最好的SEO支持,系統內部已經做了環境的兼容處理,所以能夠支持大多數的主機環境。對應前面的URL模式,PATHINFO模式下面的URL訪問地址是:
      `aidl
      http://網址/入口文件/分組名/控制器/方法/參數名/參數值/
      例如訪問上述控制器的方法,並且傳遞一個參數 id = 1:
      http://www.xingheng.com/index.php/Home/User/test/id/1/
      `

  • Rewrite形式路由(默認)

    • REWRITE模式是在PATHINFO模式的基礎上添加了重寫規則的支持,可以去掉URL地址裏面的入口文件index.php
    • 不能直接使用,需要額外配置WEB服務器的重寫規則。

      1.打開重寫(再此文件apache\conf\httpd.conf)

      • 如果是Apache則需要在入口文件的同級添加.htaccess文件

      • 內容如下:

                  <IfModule mod_rewrite.c>
                  RewriteEngine on
                  RewriteCond %{REQUEST_FILENAME} !-d
                  RewriteCond %{REQUEST_FILENAME} !-f
                  RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
                  </IfModule>

    “`


  • 兼容形式路由

    • 兼容模式是用於不支持PATHINFO的特殊環境,URL地址是:
      http://網址/入口文件?s=/分組名/控制器名/方法名/參數名/參數值

      http://www.xingheng.com/index.php?s=/Home/User/test/id/60
      

    • 只有一個參數s

- 兼容模式配合Web服務器重寫規則的定義,可以達到和REWRITE模式一樣的URL效果。

路由形式的配置

##### 在系統配置文件中體現—>convention.php

  • 上圖的配置文件可以看出默認的路由形式是 1 ;就是Pathinfo形式路由
  • 不影響其他形式路由形式訪問,影響的是thinkPHP系統封裝的URL組裝函數(U函數)的生成URL地址的形式。

## 分組
#### 一般項目會根據某個功能的適用對象進行分組。也就是平臺.比如前臺和後臺

  • ThinkPHP下的Application下Home文件夾就是一個分組。可根據需求創建新的。

    • 第一步:創建一個分組目錄,目錄與Home同級

    • 第二步:創建一個分組目錄結構

    • 第三步:在創建的分組下Controller文件夾下創建控制器,寫方法,測試

    • 第四步:訪問路由
      “`aidl
      http://網址/入口文件/分組名/控制器名/方法

    http://xingheng.com/index.php/Admin/Test/test

```

----------
   ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot032.png?raw=true)

   #### *上述就是創建分組的步驟,如果要創建分組,可以根據以上進行*

----------
 ## 控制器中的跳轉

### 1.URL組裝
- URL組裝就是根據某個規則,來組成一個URL地址,這個功能叫做URL組裝,在ThinkPHP中,一個封裝的函數來處理URL組裝,這個方法叫*U方法*。
- 除了U方法,還有`A B C D E F G I M R S `等方法,這些方法都定義在系統函數庫文件中(`function.php`)
    ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot033.png?raw=true)
- *語法格式*  
  - `U('URL路徑',參數數組);`  

   ```aidl
     <?php
        #聲明命名空間
        namespace Admin\Controller;
        #引入父類控制器
        use Think\Controller;
        #聲明並且繼承父類控制器
        class TestController extends Controller{
             #編寫測試方法
             public function test(){
                echo "hello world";
             }

             public function test1(){
                echo U('index'); 
             }

             public function test2(){
                echo U('Index/index'); 
             }

              public function test3(){
                //後面的數組可以傳遞多個參數
                echo  U('Index/index',array('id'=>789456));
             }


        }

   - 使用U方法組裝出當前控制器下index方法地址
      - `U('index');`  
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot034.png?raw=true)

   -U方法組裝出另外一個控制器Index的index的地址。
      - `U('Index/index')`
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot035.png?raw=true)

   - #### 如果給指定的頁面添加參數,比如給Index控制器下的index方法傳遞一個 id = 789456; 則:
   - `U('Index/index',array('id'=>789456))`
- ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot036.png?raw=true)

---------
### 總結出一個通用的格式
    - U('分組名/控制器名/方法名',array('參數名1'=>參數值1,參數名2'=>參數值2));

### 1.系統跳轉方法
-ThinkPHP系統中喲冾跳轉方法,分別是成功跳轉和失敗跳轉:
  - 成功跳轉:$this->success(跳轉提示,跳轉地址,等待時間);
  - 失敗跳轉:$this->error(跳轉提示,跳轉地址,等待時間);
- 跳轉提示參數必須要有,後面的可以沒有。
```aidl
     public function test4(){
            //應該跳到本頁的test方法,效果是“hello world”
            $this->success('跳轉成功',U('test'),5);
         } 


          public function test5(){
            //應該跳到本頁的test方法,效果是“hello world”
            $this->error('跳轉失敗',U('test'),5);
         } 

       }




<div class="se-preview-section-delimiter"></div>
  • 成功跳轉
  • 失敗跳轉

## ThinkPHP中的視圖(重點)
### 1.什麼是視圖
- 視圖就是MVC三大組成部分中的V(View),負責信息的輸出和展示
### 2.視圖的創建
- 創建的位置需要書分組目錄下的View目錄中與控制器同名的目錄中,例如:
- Test控制器中的login方法,需要一個模板,則模板文件login.html需要放在View/Test/login.html
- 例如創建Test控制器的test方法的模板視圖,則位置如下:

### 3.視圖的展示
- 使用display方法;
- 語法格式:

| 語法格式 | 效果 |
| ———– |:———–:|
| this>display();||| this->display(‘模板文件名’【不帶後綴】 | 展示當前控制器下的指定模板文件 |
| $this->display(‘View目錄下的目錄名/模板文件名【不帶後綴】) | 展示制定控制器目錄下的制定模板文件 |

  • 案例:
    • 在Test控制器中的test方法中展示test.html
    • 在Test控制器中的test1方法中展示test.html
    • 在Test控制器中的test2方法中展示View/Demo/test.html

### 4.變量分配(初階)
- 在實際開發中不僅僅只是展示模板這麼簡單,往往要展示數據。這個時候變量還在控制器的方法中。需要將數據傳遞到模板中並且展示。這個叫做變量分配。
- 在ThinkPHP系統中封裝好了一個變量分配的方法,這個方法叫做assign
- 具體語法 :this>assign(, php中的變量名);一般情況下,兩個參數名一樣(習慣)
- 案例:在Test控制器中的test方法中傳遞一個變量給test.html展示。
“`php
public function test(){
//echo “hello world”;

            $var = data('Y-m-d H:i:s',time());
            $this->assign('var',$var);
            //展示模板
            $this->display();
         }



- 目前已經將var變量傳遞給模板文件test.html,在模板文件中如何展示數據呢?
- 默認的展示變量的方法是:
- {$模板中的變量名}
-


### 5.變量分隔符
- 在ThinkPHP中默認的變量分隔符是“{”和“}”,其是可以被更改的,可以在配置文件中修改
-


### 6.模板常量的替換機制
- 在實際開發中,在引入圖片、css、js等資源文件時,往往需要寫一些比較複雜的路徑,所以這時候需要替換機制。
- 在ThinkPHP中默認給我們幾個常用的模板常量。
- __MODULE__:表示從域名後面開始一直到分組名結束的路由
- __CONTROLLER__:表示從域名後面開始一直到控制器結束的路由
- __ACTION__:表示從域名後面開始一直到方法名結束的路由
- __PUBLIC__:站點根目錄下的Public目錄的路由
- __SELF__:表示從域名後面開始一直到路由的最後(如果沒有參數,則__SELF____ACTION__所表達的內容是一樣的)

 - 如下圖:
  - ![](https://github.com/HunterXing/resourse/blob/master/images/screenshot/screenshot043.png?raw=true)
  • 其中ThinkPhp中關於模板常量的代碼在行爲文件中,路徑如下

    • ThinkPHP\Library\Behavior\ContentReplaceBehavior.class.php
      -
  • 模板常量的核心就是字符串的替換

    • 爲了後期使用的方便,我們可以在配置文件中定義一個自定義的模板常量:
      • 說明:在開發的時候,建議不要去修改系統配置文件。可以將需要修改的配置項在分組/應用級別的配置文件中去定義
      • 上面就是自定義的模板文件。下面測試一下:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章