這裡不講原理,只講操作。
這裡不說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。
定義路由
這裡屬於錦上新增的部分,暫時不細說。
不過,你們有沒有想過,“路由”這兩個字,是什麼意思?我第一次接觸時,就是來自計算機領域,知道它在表達什麼,但是不知道這個詞的來歷,這種表達方式,似乎有點歷史的樣子,似乎不應該來自計算機領域。
後經查詢,果然,它來自市政建設領域,如下:
路由(市政工程術語)
管線的“路由”一般可以概述為管線的起點到通往每個目的地的路徑,即管線的走向位置
管線的“路由”一般可以概述為管線的起點到通往每個目的地的路徑,即管線的走向位置,一般依據規劃紅線由當地市政或規劃部門所確定,是管道施工的主要依據。 同時“路由”也屬於管線設計過程中的一個環節。管線產生出來的過程一般包括選線路、確定路由、出圖、施工等程式。
其中,“確定路由”準確的叫法應該稱為確定“管道走向”,是配管專業在基本確定裝置佈置後,開展詳細配管,前進行配管研究時出的一種圖。圖中主要表示大管道的走向和初步位置。
這裡的“由”,是經由的由,表示從哪走。網路領域中的“路由”,借用了市政領域“找路”這個方案的術語,即路由。