- 進入ThinkPHP官網,下載完整版本:http://www.thinkphp.cn/
- 解壓出下載的 ThinkPHP 復制所有文件
- 在 phpstudy 安裝路徑下的找到 www 文件夾,新建 tp5 文件夾,將解壓的所有 ThinkPHP 文件粘貼到tp5中
- 重啟 phpstudy
- 在瀏覽器中輸入 http://localhost/tp5/public/
- 顯示為 “ ThinkPHP V5
十年磨一劍 - 為API開發設計的高性能框架”即為安裝成功
- 所有的目錄要使用小寫+下划線
- 函數文件名必須以 .php 結尾
- 命名空間 namespace 必須和目錄路徑一致: <? php namespace app\index\controller
- 類庫名必須和文件名保持一致,首字母必須大寫,采用駝峰式書寫:文件名為 Index.php 那么類庫名必須為 class Index {...}
- 函數名必須為首字母小寫,采用駝峰書寫格式: pubilc function getUserName(){...}
- 變量名首字母小寫,采用駝峰書寫格式:public $userName = '';
- 構造函數名以雙下載線+小寫字母,這種文件盡量不用:public function __controll(){...}
- 常量必須全部大寫並且以下划線連接:define('APP_STATE','dev');
- 所有配置名必須全部小寫並且以下載線連接:'app_namespace' => 'app',
- 數據庫或表名必須以小寫字母加下載線連接,不能出現駝峰或首字母大寫:user_name
- 頂及命名空間(目錄)統一叫 app,形成良好的開發方式:namespace app\index\controller 從命名空間來看這個路徑就是目錄的路徑
- 將 application 文件夾名稱更改為 app。可以此文件夾下新建各種模塊,比如首頁(index)、登錄管理(admin)、用戶管理(user)等
- 建立首頁(index)為例,路徑為:app\index\controller\Index.php(意為index模塊的控制器controller下的Index.php 文件)
- 建立方法 1)定義模塊的命名空間 namespace app\index\controller; 2)定義類名 class Index {...} 3) 寫方法 public function index(){...}
- 修改 public/index.php 路徑,指向目錄app,也就是入口路徑
define ( 'APP_PATH' , __DIR__ . '/app/' );
<?php //定義app命名空間 namespace app\index\controller; //定義類名,類名和文件名保持一致 class Index { //編寫一個方法 public function index(){ return "This is PHP Class Name." } } ?>
- 導入:use app\common\controller\User as commonUser;【導入app\模塊名稱\controller\文件名稱 as 別名(別名以模塊名稱+方法名稱,駝峰組合)】
- 繼承: class User extends commonUser { ... } 將導入的方法繼承給當前類,在當前類中的方法中使用
- 使用: 直接在當前方法中使用繼承過來的方法
class User extends commonUser { public function demo(){ //直接return 繼承過來的方法 showName() return $this -> showName("kevin.chen"); } }
ThinkPHP 瀏覽器測試模塊地址:
http://serverName/index.php(或者其它應用入口文件)/模塊/控制器/方法/[參數名/參數值...]
serverName 后面應該為 tp5 的入口文件而非 phpstudy 的入口文件路徑,否則會報一個莫名其妙的 403 錯誤!
當前服務器地址為 http://localhost當前入口文件路徑為 tp5/public/index.php當前模塊/控制器/方法為 index/index/test
Index.php

測試當前模塊

ThinkPHP 修改默認配置 ,修改convention.php 可以達到修改配置php的目的,但是盡量不要對這個配置作任何的改變,否則以后對這個框架進行任何的升級會帶來意想不到的錯誤。
- 在 public/index.php 中新建一個常量
//定義配置文件目錄define('CONF_PATH', __DIR__ . '/../conf/')
-
與app同級新建一個 conf 目錄
- 在index 模塊的文件 Index.php 中新建一個方法,起名為 testConfig
public function testConfig(){dump(config());}
- 瀏覽器中測試 http://localhost/tp5/public/index.php/index/index/testConfig 返回當前狀態的所有配置,當前狀態的配置來源於 thinkphp>convention.php
- 修改 convention.php ,添加
//默認作者'app_author' => 'kevin.chen' , 刷新 url 即可看到 config 配置中已經添加一個 app_author 的數組
ThinkPHP 應用配置,修改當前應用的配置可以替換當前 PHP 默認的配置信息。應用配置目錄 conf,所有的關於應用配置都在這個目錄下修改
- 在 app 下新建一個后台的模塊 admin\controller\Index.php
-
public function showAdminConfig(){dump(config());};
-
在瀏覽器中輸入http://localhost/tp5/public/index.php/admin/index/showAdminConfig 同樣可以打印出 php的配置,但是我們是不要使用 php 框架的配置文件信息的,我們是要打印自己應用的配置信息,因此需要建立自己應用的 config.php 配置文件
- 同 app 同級建立一個 conf 的目錄,在這個目錄下建立一個 config.php 配置文件,這個配置文件中直接 return 一個數組,這個數組就是 當前應用的配置信息
return ["app_name" => "my_anviz","app_author" => "kevin.chen","app_email" => "11452155@qq.com",]
- 再次刷新 http://localhost/tp5/public/index.php/admin/index/showAdminConfig 就可以看到 打印的配置信息的尾部,增加了剛剛增加的數組。
- 說明應用配置信息是可以改變 PHP框架的配置信息的。如果想改變 php 的配置信息不可以修改convention.php文件,只需修改當前應用的配置信息即可改變 php 的配置信息。
- 比如想要修改 PHP中的調試模式為 true,只需在當前應用的配置文件中增加一條
app_debug => true 的配置信息即可改變原 php 的配置信息。return ["app_name" => "my_anviz","app_author" => "kevin.chen","app_email" => "11452155@qq.com","app_debug" => true]

此時 index.php 就是入口文件,所有要訪問控制器模塊的方法必須要經過這個入口文件才能進入控制器模塊,這樣是不安全的。隱藏入口文件就是這個原因,需要修改 Apache中的 httpd.conf 文件,以 phpstudy 為例:
第二步,找到網站根目錄,DocumentRoot "E:\soft\phpstudy2018\PHPTutorial\WWW",將 AllowOverride 設置為 All

- 定義應用目錄入口
- 定義配置文件目錄入口
- 加載框架引導文件

第二步,打開 thinkphp 框架的配置文件 convention.php 找到 auto_bind_module 這個入口自動綁定模塊的配置信息

將它復制到 我們應用的配置文件中 app\conf\config.php 中,將默認值改為 true

第三步,在我們的應用中新建一個提供給第三方的模塊,app\aip\controller\Api.php

思考:如果我們有多個入口文件,路徑相同,指向應用相同,入口文件對應應用中的模塊,只要在寫 url 請求時 ,更改應用的模塊名就可以訪問不同的模塊。是這樣嗎?
ThinkPHP 是個單入口框架,所有的入口都會進入 index.php 文件,通過 index.php來接收所有的http請求,請求中的所有參數都可以通過 Request 這個對象進行接收和處理。
下面就寫 thinkPHP 的 Request 這個對象是怎么對請求進行處理的,首先要知道如何獲取 request 這個對象的?
<?php namespace app\index\controller; use think\request; //Request 對象要從think\request 中獲取 class Index { //注入對象的方式 public function index(Request $request){ dump($request); } } ?>
#如果想了解更加詳細的 $request 的方法,就去 ThinkPHP/library/think/Request.php 中查看所有的方法
以下列舉了常用的對參數獲取的方法:
<?php namespace app\index\controller; use think\request; class Index { public function getRequest(Request $request){ #獲取瀏覽器的值 #如果當前請求地址為:http://localhost/tp5/public/index/index/getRequest dump($request -> domain()); //獲取瀏覽器的域名,返回為 "http://localhost" dump($request -> pathinfo()); //獲取參數前的所有的路徑,返回為 "index/index/getRequest" dump($request -> path()); //獲取不含文件后綴的路徑,如果沒有后綴,pathinfo()同path()返回的對象是一樣的,返回為 "index/index/getRequest" #判斷請求類型 #如果當前請求地址為:http://localhost/tp5/public/index/index/getRequest?id=5 dump($request -> method()); //返回為 "GET" ,在web開發中一般只有GET與POST 兩種請求類型 dump($request -> isGet()); //判斷當前請求是否為GET,返回為一個布爾值為true = bool(true) dump($request -> isPost()); //判斷是否為post請求,返回應該 為false dump($request -> isAjax()); //判斷當前請求是否為 Ajax 請求,返回應該 為false #獲取請求參數 #如果當前請求地址為:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 dump($request -> get()); //獲取當前的get ?后的參數,返回key為id,value為5: ["id"] => string(1) "5" dump($request -> param()); //獲取當前的get ?前的參數,返回key為id,value為5: ["id"] => string(1) "5" dump($request -> post()); //獲取當前 post 的值,當前url是個get請求,因此只會返回一個空的數組 array(0) {} #測試session,獲取當前瀏覽器的 session 的值,如果沒有只會返回一個空的數組 array(0) {} #1、如果想要在瀏覽器中打印出來,需要進入thinkphp/convention.php,復制session配置到當前應用的config.php中 #2、需要使用助手方法給session,set一個值 session('name','kevin.chen'); //設置 session 的值 dump($request -> session()); //返回一個數組 array(1) {["name"] => string(10) "kevin.chen"} #測試 cookie,首先需要set一個值 cookie('email','don-pan.cwf@163.com'); //設置cookie的值 dump($request -> cookie()); //獲取 cookie的值,會返回一個 PHPSESSID 的值 #獲取某個參數的值 #如果當前請求地址為:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 #在查詢時通常使用通過某個 id 來查詢等 dump($request -> get('id')); //返回 "5" dump($request -> cookie('email')); //返回 "don-pan.cwf@163.com" dump($request -> post("id")); //不存在的id,返回為null dump($request -> param("page")); //返回為 "10" #獲取當前的模塊 控制器 方法 #如果當前請求地址為:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 #在編寫權限控制時,通過這三個選項共同來驗證是否有權限訪問 dump($request -> module()); //返回當前模塊名為 index dump($request -> controller()); //返回當前控制器名為 Index (首字母大寫) dump($request -> action()); //返回當前方法名為 getRequest #獲取當前 url #如果當前請求地址為:http://localhost/tp5/public/index/index/getRequest?id=5&page=10 dump($request -> url()); //返回 "/tp5/public/index/index/getRequest?id=5&page=10" dump($request -> baseUrl()); //返回不包含參數的url"/tp5/public/index/index/getRequest" } } ?>
ThinkPHP 連接數據庫,並查詢表
第一步,要新建數據庫,phpMyAdmin,使用它來建庫建表
第二步,數據庫必須與PHP進行配置,才可以使用PHP來調用數據庫,操作數據庫。
數據庫配置路徑為:
- 找到 thinkPHP -> convention.php ,找到 數據庫設置【database】這個數組
- 在當前應用的 conf 目錄下,新建一下 database.php 文件
- 將 database 里面的key,value復制到新建的 database.php 當中,分別對 數據庫中的 key 設置它的 value(配置紅色注釋部分)
- 將這個數組 return 返回
<?php //數據庫配置 use\think\Env; return [ // 數據庫類型 'type' => 'mysql', // 數據庫連接DSN配置 'dsn' => '', // 服務器地址 'hostname' => '127.0.0.1', // 數據庫名 'database' => 'test', // 數據庫用戶名 'username' => 'root', // 數據庫密碼 'password' => 'root', // 數據庫連接端口 'hostport' => '3306', // 數據庫連接參數 'params' => [], // 數據庫編碼默認采用utf8 'charset' => 'utf8', // 數據庫表前綴 'prefix' => '' ] ?>
第三步,配置好數據庫之后,就可以對數據庫進行操作了。
在當前模塊下新建一個方法,取名為 testDataBase
# 首先要加載 thinkphp 的db 方法 # 再用 db 的助手方法查詢表 <?php namespace app\index\controller; use think\Db; class Index { #測試數據庫是否連接成功 public function testDataBase(){ $res = db('user') -> find(); dump($res); } } ?>
我們在瀏覽器中輸入如下 url ,就可以看到查詢的表數據了:
http://localhost/tp5/public/index/index/testDataBase
array(3) { ["user_id"] => int(1) ["user_name"] => string(10) "kevin.chen" ["user_age"] => string(2) "34" }
返回3個字段,每個字段的 key,數據類型,value
project 應用部署目錄
├─application 應用目錄(可設置),所有的應用都寫在這里,經常使用
│ │ ├─config.php 模塊配置文件
│ │ ├─common.php 模塊函數文件
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ ├─view 視圖目錄
├─admin(后台的邏輯,對應index模塊)
│ ├─common.php php的公共函數,可以寫在這里,任何地方都可以調用,應用公共(函數)文件
│ ├─tags.php 是對 ThinkPHP 框架進行擴展而不需要修改源碼
├─extend 加載第三方庫時使用,直接將類庫下載到這個目錄
│ ├─static 靜態資源存放目錄(css,js,image)
├─robots.txt 搜索引擎爬蟲定義規則
│ └─.htaccess 用於 apache 的重寫
├─vendor 第三方類庫目錄(Composer)
├─thinkphp 框架系統目錄
│ ├─lang 語言包目錄
│ ├─library 框架核心類庫目錄
│ │ ├─think 框架的核心文件,Think 類庫包目錄
│ │ └─traits 系統 Traits 目錄
│ ├─tpl 框架默認的一些模板,系統模板目錄
│ ├─.htaccess 用於 apache 的重寫
│ ├─.travis.yml CI 定義文件
│ ├─base.php 定義一些常量,基礎定義文件
│ ├─composer.json composer 定義文件,配置文件
│ ├─console.php 控制台入口文件
│ ├─convention.php 框架默認的配置文件,慣例配置文件
│ ├─helper.php 助手函數文件(可選)
│ ├─LICENSE.txt 授權說明文件
│ ├─phpunit.xml 單元測試配置文件
│ ├─README.md README 文件
│ └─start.php 框架引導啟動文件
├─build.php 自動生成定義文件(參考)
├─composer.json composer 定義文件
├─LICENSE.txt 授權說明文件
├─README.md README 文件
├─think 命令行入口文件
