thinkphp學習(一)——安裝ThinkPHP5
目錄:
一、Git安裝ThinkPHP
1、環境要求:
- PHP >=5.4.0
- PDO PHP Extension
- MBstring PHP Extension
- CURL PHP Extension
2、安裝
ThinkPHP無需安裝,這裡所說的安裝是把ThinkPHP5
的框架放入WEB
執行環境中(前提是已經配置好WEB執行環境),以下僅介紹Git安裝方式,更多安裝方式(如官網下載安裝、Composer安裝)請點選前往官方開發手冊:https://www.kancloud.cn/manual/thinkphp5/118006
【Git】
在Git上ThinkPHP5.0拆分為多個倉庫,主要包括:
- 應用專案:
https://github.com/top-think/think
- 核心框架:
https://github.com/top-think/framework
為了支援Composer單獨更新核心框架,所以才將應用和核心倉庫分離。
如果訪問github速度比較慢,可以使用下面兩個國內GIT倉庫
【碼雲】
- 應用專案:
https://gitee.com/liu21st/thinkphp5
- 核心框架:
https://gitee.com/liu21st/framework.git
【Coding】
- 應用專案:
https://git.coding.net/liu21st/thinkphp5.git
- 核心框架:
https://git.coding.net/liu21st/framework.git
首先克隆下載應用專案:
git clone https://github.com/top-think/think tp5
然後切換到tp5
目錄下,再克隆核心框架:
git clone https://github.com/top-think/framework thinkphp
克隆完成後,即完成了ThinkPHP5.0
的Git下載方式,當需要更新框架的時候,只需要切換到thinkphp核心目錄下面,執行:
git pull https://github.com/top-think/framework
在瀏覽器中輸入地址:
http://localhost/tp5/public/
如果瀏覽器輸出如圖所示:
就說明已經完成了ThinkPHP5
的安裝!
二、目錄結構介紹
下載最新版ThinkPHP框架後,解壓縮後可以看到初始的目錄結構如下:
project 應用部署目錄
├─application 應用目錄(可設定)
│ ├─common 公共模組目錄(可更改)
│ ├─index 模組目錄(可更改)
│ │ ├─config.php 模組配置檔案
│ │ ├─common.php 模組函式檔案
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
│ │ ├─view 檢視目錄
│ │ └─ ... 更多類庫目錄
│ ├─command.php 命令列工具配置檔案
│ ├─common.php 應用公共(函式)檔案
│ ├─config.php 應用(公共)配置檔案
│ ├─database.php 資料庫配置檔案
│ ├─tags.php 應用行為擴充套件定義檔案
│ └─route.php 路由配置檔案
├─extend 擴充套件類庫目錄(可定義)
├─public WEB 部署目錄(對外訪問目錄)
│ ├─static 靜態資源存放目錄(css,js,image)
│ ├─index.php 應用入口檔案
│ ├─router.php 快速測試檔案
│ └─.htaccess 用於 apache 的重寫
├─runtime 應用的執行時目錄(可寫,可設定)
├─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 命令列入口檔案
三、架構
ThinkPHP5.0
應用基於MVC
(Model模型-View檢視-Controller)的方式來組織。
MVC是一個設計模式,它強制性的使應用程式的輸入、處理和輸出分開。使MVC應用程式被分成三個核心部件:模型(M)、檢視(V)、控制器(C),它們各自處理自己的任務。
5.0的URL訪問受路由決定,如果關閉路由或者沒有匹配路由的情況下,則是基於:
http://serverName/index.php(或者其它應用入口檔案)/模組/控制器/操作/引數/值…
入口檔案
使用者請求的PHP檔案,負責處理一個請求(注意,不一定是URL請求)的生命週期,最常見的入口檔案是index.php
,有時候也會為了某些特殊的需求而增加新的入口檔案,例如給後臺模組單獨設定的一個入口檔案admin.php
或者一個控制器程式入口think
都輸入入口檔案。
應用
應用在ThinkPHP
中是一個管理系統架構及生命週期的物件,由系統的\think\App
類完成,應用通常在入口檔案中被呼叫
和執行
,具有相同的應用目錄(APP_PATH
)的應用我們認為是同一個應用,但一個應用可能存在多個入口檔案。
應用具有自己獨立的配置檔案、公共(函式)檔案。
模組
一個典型的應用是由多個模組組成的,這些模組通常都是應用目錄下面的一個子目錄,每個模組都有自己獨立的配置檔案、公共檔案和類庫檔案。
5.0支援單一模組架構設計,如果你的應用下面只有一個模組,那麼這個模組的子目錄可以省略,並且在應用配置檔案中修改:
'app_multi_module' => false,
控制器
每個模組擁有獨立的MVC
類庫及配置檔案,一個模組下面有多個控制負責響應請求,而每個控制器其實就是一個獨立的控制器類。
控制器主要負責請求的接受,並呼叫相關的模型處理,並最終通過檢視輸出。嚴格來說,控制器不應該過多的介入業務邏輯處理。
5.0的控制器類比較靈活,可以無需繼承任何基礎類庫。
一個典型的Index
控制器類如下:
namespace app\index\controller;
class Index
{
public function index()
{
return 'hello,thinkphp!';
}
}
操作
一個控制器包含多個操作(方法),操作方法是一個URL訪問的最小單元。
下面是一個典型的Index控制器的操作方法定義,包含了兩個操作方法:
namespace app\index\controller;
class Index
{
public function index()
{
return 'index';
}
public function hello($name)
{
return 'Hello,'.$name;
}
}
操作方法可以不使用任何引數,如果定義了一個非可選引數,則該引數必須通過使用者請求傳入,如果是URL請求,則通常是$_GET
或者 $_POST
方式傳入。
模型
模型類通常完成實際的業務邏輯和資料封裝,並返回和格式無關的資料。
模型類不一定要訪問資料庫,而且在5.0的架構設計中,只有進行實際的資料庫查詢操作的時候,才會進行資料庫的連結,是真正的惰性連線。
ThinkPHP
的模型支援多層設計,你可以對模型層進行更細化的設計和分工,例如把模型層分為邏輯層/服務層/事件層等等。
檢視
控制器呼叫模型類後返回的資料通過檢視組裝成不同格式的輸出。檢視根據不同的需求,來決定呼叫模板引擎進行內容解析後輸出還是直接輸出。
驅動
系統很多的元件都採用驅動式設計,從而可以更靈活的擴充套件,驅動類的位置預設是放入核心類庫目錄下面,也可以重新定義驅動類庫的名稱空間而改變驅動的檔案位置。
行為
為(Behavior)是在預先定義好的一個應用位置執行的一些操作。類似於AOP
程式設計中的“切面”的概念,給某一個切面繫結相關行為就成了一種類AOP
程式設計的思想。所以,行為通常是和某個位置相關,行為的執行時間依賴於繫結到了哪個位置上。
要執行行為,首先要在應用程式中進行行為偵聽,例如:
// 在app_init位置偵聽行為
\think\Hook::listen('app_init');
然後對某個位置進行行為繫結:
// 繫結行為到app_init位置
\think\Hook::add('app_init','\app\index\behavior\Test');
一個位置上如果綁定了多個行為的,按照繫結的順序依次執行,除非遇到中斷。
名稱空間
ThinkPHP5
採用了PHP
的名稱空間進行類庫檔案的設計和規劃,並且符合PSR-4
的自動載入規範。