ThinkPHP最簡教程

王明輝發表於2018-05-17

這裡不講原理,只講操作。

這裡不說MVC,只說目錄(資料夾)結構。

假設Apache Http Server、PHP、MySql都已經安裝完畢並已配置完畢,能夠輸出phpinfo()。

 

框架是什麼?

 

下載

安裝AMP

安裝ThinkPHP

執行第一個頁面

  http://localhost

  http://127.0.0.1

  等

  這裡的http://localhost,實際上是通過某個方法實現的頁面的跳轉,它等於http://localhost/index/index/index,等於http://localhost/index.php?controller=index&action=index

  看到最後那個連結形式,是不是比較熟悉了?

  但是這種連結方式屬於動態連結,一個問題是不好記不清晰,另一個問題是搜尋引擎不喜歡記錄這樣的連結,它們更傾向於收集靜態頁面。

  那麼ThinkPHP就把動態連結,通過一些方法,轉為了看起來像靜態的連結。用的什麼方法實現的這個效果?暫時不必關心。

  所以,http://localhost/index/index/index這個連結從左到右三個Index的意思是,在網站根目錄下,有個index資料夾【一級】,下面有個controller資料夾(這個沒有也沒必要在連結上顯示出來,以後還會有別的目錄),下面有個index.html檔案【二級】,

  檔案裡有個類(這個類和檔案屬於同一個級別,並且名稱必須一致),類裡面有個Index函式【三級】,這個函式沒有引數,所以後面沒有了,如果有引數,那麼從第三個index開始,往後全是引數的鍵值對兒。

  比如:http://localhost/index/index/index/a/11/b/22/c/33,一目瞭然,不解釋了。

  5.0不再支援普通的URL訪問方式,所以下面的訪問是無效的,你會發現無論輸入什麼,訪問的都是預設的控制器和操作

  http://localhost/index.php?controller=TestController&action=index

 

執行第二個頁面

  在tp5.0\application\index\controller目錄下,複製index.php,改成index2.php,注意!開啟這個檔案,把裡面的類名(即Class後面的”index“)改成Index2,無論你改成什麼,要保持和檔名一致。否則會報錯,報控制器找不到的錯,類似這樣:

控制器不存在:app\index\controller\Index2

官方推薦的視訊教程裡並沒有強調這一點,如果照他們說的,只改檔名,是打不開那個頁面的。

  如果你改完檔名和類名,回到瀏覽器,F5重新整理,發現沒什麼作用,依然報錯,並且確定沒有其它問題的情況下,按Ctrl+F5,強制清快取重新整理試一下。

 

連線資料庫

  用PHP的大部分專案都是要運算元據庫的。

  要連資料庫,有以下幾個事兒要做:

  PHP安裝目錄下找到php.ini

    查詢extension_dir,把等號後面的路徑改為絕對路徑,像這樣: extension_dir = "F:/php/ext"

    查詢extension=php_pdo_mysql.dll,把這行釋放出來,即把最前面的分號刪除,使之有效。

    因為PHP5.6已經內建了PDO,所以不必再單獨引用PHP_PDO.dll了。

 

URL訪問規則

  如果\application\config.php檔案中的url_convert設定為true時

  控制器命名為:Abcde時,訪問abcde、Abcde、ABCDE均有效

  控制器命名為:AbCde時,訪問abcde、Abcde、AbCde、ABCDE均無效,此時要用Ab_Cde來訪問。

  也就是說,如果你的名字中有大寫,那麼就要在每個大寫的前面加下劃線。

  即,ThinkPHP以一個名字中的第二個大寫來判斷是否加入下劃線,對駝峰命名法進行了特別的處理。

  下面是這種轉換的核心程式碼:

    /**
     * 字串命名風格轉換
     * type 0 將 Java 風格轉換為 C 的風格 1 將 C 風格轉換為 Java 的風格
     * @access public
     * @param  string  $name    字串
     * @param  integer $type    轉換型別
     * @param  bool    $ucfirst 首字母是否大寫(駝峰規則)
     * @return string
     */
    public static function parseName($name, $type = 0, $ucfirst = true)
    {
        if ($type) {
            $name = preg_replace_callback('/_([a-zA-Z])/', function ($match) {
                return strtoupper($match[1]);
            }, $name);

            return $ucfirst ? ucfirst($name) : lcfirst($name);
        }

        return strtolower(trim(preg_replace("/[A-Z]/", "_\\0", $name), "_"));
    }

 

不使用.htaccess會怎樣?  

 

一個奇怪的現象

某個控制器和類名,理論上應當一致,並且建議首字母應當大寫。如果檔名和類名的首字母改成小寫,再去訪問之前的URL,並不會馬上報錯,保持重新整理狀態一直重新整理,過了大約20秒,報錯。再改回首字母大寫,也不會馬上報錯,再過一會兒,才報錯。

這是為什麼?像是因為快取,又在runtime目錄下沒有發現什麼特別的東西。

為什麼?

 

隱藏入口檔案

先決條件:

1、httpd.conf配置檔案中載入mod_rewrite模組。

  去掉LoadModule rewrite_module modules/mod_rewrite.so前面的分號


2、把AllowOverride None改成owOverride All

 

TP5.0預設的入口檔案是tp5.0\public\index.php,如果不希望被掃描,可以改成其它名字,例如ttt.index。同時要注意修改同級目錄下的.htaccess檔案中的最後一行的正規表示式,index.php改成ttt.php。

定義路由

 這裡屬於錦上新增的部分,暫時不細說。

不過,你們有沒有想過,“路由”這兩個字,是什麼意思?我第一次接觸時,就是來自計算機領域,知道它在表達什麼,但是不知道這個詞的來歷,這種表達方式,似乎有點歷史的樣子,似乎不應該來自計算機領域。

後經查詢,果然,它來自市政建設領域,如下:

路由(市政工程術語)
管線的“路由”一般可以概述為管線的起點到通往每個目的地的路徑,即管線的走向位置

管線的“路由”一般可以概述為管線的起點到通往每個目的地的路徑,即管線的走向位置,一般依據規劃紅線由當地市政或規劃部門所確定,是管道施工的主要依據。 同時“路由”也屬於管線設計過程中的一個環節。管線產生出來的過程一般包括選線路、確定路由、出圖、施工等程式。
其中,“確定路由”準確的叫法應該稱為確定“管道走向”,是配管專業在基本確定裝置佈置後,開展詳細配管,前進行配管研究時出的一種圖。圖中主要表示大管道的走向和初步位置。

這裡的“由”,是經由的由,表示從哪走。網路領域中的“路由”,借用了市政領域“找路”這個方案的術語,即路由。

 

相關文章