Composer: php世界裏的包管理器
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 is based on mvc
一個控制器包含多個操做(方法),操做方法是一個URL訪問的最小單元。php
http: //serverName/index.php(或者其它應用入口文件)/模塊/控制器/操做/[參數名/參數值...]eg: localhost:8080/in`dex.php/index/methodcss
模型類一般完成實際的業務邏輯和數據封裝,並返回和格式無關的數據。html
ThinkPHP的模型層支持多層設計,能夠將模型更加細分,例如把模型層分爲邏輯層/服務層/事件層等等。
控制器調用模型類後返回的數據經過視圖組裝成不一樣格式的輸出web
5.0的URL訪問受路由決定,若是關閉路由或者沒有匹配路由的狀況下,則是基於thinkphp
http: //serverName/index.php(或者其它應用入口文件)/模塊/控制器/操做/參數/值…
一個典型的應用是由多個模塊組成的,這些模塊一般都是應用目錄下面的一個子目錄,每一個模塊都有本身獨立的配置文件、公共文件和類庫文件。如上index/test/test2爲三個模塊數據庫
行爲(Behavior)是在預先定義好的一個應用位置執行的一些操做。apache
發生做用的位置稱之爲鉤子,當應用程序運行到這個鉤子的時候,就會被攔截下來,統一執行相關的行爲。給某一個鉤子綁定相關行爲就成了一種類 AOP編程的思想。
在應用程序中進行行爲偵聽編程
// 在app_init位置偵聽行爲 \think\Hook::listen('app_init');
而後對某個位置進行行爲綁定:json
// 綁定行爲到app_init位置 \think\Hook::add('app_init','\app\index\behavior\Test');
入口文件安全
入口文件位置的設計是爲了讓應用部署更安全,public
目錄爲web可訪問目錄,其餘的文件均可以放到非WEB訪問目錄下面。
通常路徑在../public/index.php
Index.php
// 應用入口文件 // 定義項目路徑 define('APP_PATH', __DIR__ . '/../application/'); // 加載框架引導文件 require __DIR__ . '/../thinkphp/start.php';
引導文件
start.php
文件就是系統默認的一個引導文件。在引導文件中,會依次執行下面操做:
🤨 不要管細枝末節,往下看吧
模塊/控制器/操做
這是默認的分發請求機制,系統會根據URL或者路由地址來判斷當前請求的模塊、控制器和操做名,並自動調用相應的訪問控制器類,執行操做對應的方法。
控制器的全部操做方法都是return
返回而不是直接輸出,系統會調用Response::send
方法將最終的應用返回的數據輸出到頁面或者客戶端,並自動轉換成default_return_type
參數配置的格式。因此,應用執行的數據輸出只須要返回一個正常的PHP數據便可。
一句話歸納👇:
controller用return就完事了,系統會幫你把返回的數據格式搞好而後輸出給頁面/客戶端
默認狀況下,URL
是不區分大小寫的,也就是說 URL
裏面的模塊/控制器/操做名會自動轉換爲小寫,控制器在最後調用的時候會轉換爲駝峯法處理。
若是但願URL
訪問嚴格區分大小寫,能夠在應用配置文件中設置:
// 關閉URL中控制器和操做名的自動轉換 'url_convert' => false,
關閉後就變成大小寫敏感了
├─application 應用目錄(可設置) │ ├─common 公共模塊目錄(可選) │ ├─common.php 公共函數文件 │ ├─route.php 路由配置文件 │ ├─database.php 數據庫配置文件 │ ├─config.php 應用配置文件 │ ├─module1 模塊1目錄 │ │ ├─config.php 模塊配置文件 │ │ ├─common.php 模塊函數文件 │ │ ├─controller 控制器目錄 │ │ ├─model 模型目錄(可選) │ │ ├─view 視圖目錄(可選) │ │ └─ ... 更多類庫目錄 │ │ │ ├─module2 模塊2目錄 │ │ ├─config.php 模塊配置文件 │ │ ├─common.php 模塊函數文件 │ │ ├─controller 控制器目錄 │ │ ├─model 模型目錄(可選) │ │ ├─view 視圖目錄(可選) │ │ └─ ... 更多類庫目錄
有效的解決了多模塊和Composer
類庫之間的命名空間衝突問題,而且實現了更加高效的類庫自動加載機制。
$studentModel = new Student(✘) //正確寫法 $studentModel = new \app\index\model\Student or use app\index\model\Student $studentModel = new Student
做爲一種擴展機制,能夠方便的實現一個類庫的多繼承問題。(看不懂👀)
新版的控制器輸出採用Response
類統一處理
經過設置default_return_type
或者動態設置不一樣類型的Response
輸出就能夠自動進行數據轉換處理
例如設爲json:
'default_return_type'=>'json'
namespace app\index\controller; class Index { public function index() { $data = ['name'=>'thinkphp','url'=>'thinkphp.cn']; return ['data'=>$data,'code'=>1,'message'=>'操做完成']; } }
請求URL地址後返回
{"data":{"name":"thinkphp","url":"thinkphp.cn"}, "code":1, "message":"\u64cd\u4f5c\u5b8c\u6210"}