1 說明與概述
1.1 說明
以下內容大部分來源於TP6完全開發手冊,以手冊為主附上個人理解,僅作學習使用.
1.2 概述
第一篇學習筆記,主要記錄TP6的基礎,包括TP6簡介,安裝,Hello World,目錄結構,配置等.
2 TP6
TP是一個免費的開源的,快速的,簡單的面向對象的輕量級的PHP開發框架,是為了敏捷WEB應用開發和簡化企業應用開發而誕生的.TP遵循Apache2開源許可協議發布,意味着可以免費使用TP,甚至允許基於TP開發的應用開源或商業產品發布/銷售.
3 TP6主要新特性
- 采用PHP7強類型(嚴格模式)
- 支持更多PSR規范
- 多應用支持
- ORM組件獨立
- 改進的中間件機制
- 更強大和易用的查詢
- 全新的事件系統
- 支持容器invoke回調
- 模板引擎組件獨立
- 內部功能中間優化
- SESSION機制改進
- 緩存及日志支持多通道
- 引入Filesystem組件
- 對Swoole以及協程支持改進
- 對IDE更加友好
- 統一和精簡大量用法
4 安裝
4.1 安裝要求
在安裝TP6之前,需要先安裝:
- PHP ( >= 7.1.0)
- Composer
4.2 Composer
4.2.1 Composer簡介
Composer是PHP5.3以上用來管理依賴關系的工具,可以在自己的項目中聲明所依賴的外部工具庫,Composer會安裝這些依賴的庫文件.
4.2.2 Composer安裝
Linux/Mac:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
Windows:戳這里.
筆者的是win環境,以win為例:首先用上面的鏈接下載Composer-Setup.exe.
選擇php.exe的位置.
這里筆者遇到的問題是firebird與oci這兩個模塊缺失的問題,解決方法戳這里.
.
好了之后會修改php.ini的默認配置,原來的會備份,next修改即可.
下一步是代理設置,不需要的直接next.
然后說提示Failed to decode zlib stream.
(如果沒遇到這種問題直接使用exe安裝成功的可以略過下面)
其實linux下這種問題是很容易解決的,編譯安裝zlib就是了,但是win下就有點麻煩了.於是搜了以下zlib在win下的安裝方法,需要使用VS,下面是Github上的zlib資源:
可能這真的是一個"wrong place"...
好吧不廢話了,筆者平時不需要用VS,為了一個zlib去下一個VS這怎么看也不划算.找了一下其他的安裝方法,使用另一個文檔安裝(戳這里):
然后終於成功了:
4.2.3 (可選)換鏡像
官方建議使用國內的阿里雲鏡像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer
這是一種全局的修改配置文件的方式,還可以修改當前項目的配置文件,進入項目的根目錄(composer.json所在的目錄),執行:
composer config repo.packagist composer https://mirrors.aliyun.com/composer
其實相比起全局就是少了一個-g.
上面的命令會在當前項目中的composer.json末尾添加鏡像配置信息(當然可以直接手動添加):
"repositories":
{
"packagist":
{
"type":"composer",
"url":"https://packagist.phpcomposer.com"
}
}
4.2.4 安裝TP6穩定版
cd切換到項目目錄,
cd project
composer create-project topthink/think tp6
其中tp6就是應用根目錄,可以隨意修改.
如果之前已經安裝過,可以切換到項目目錄,使用以下命令更新:
composer update topthink/framework
(會刪除thinkphp目錄重新安裝新版本)
4.2.5 安裝TP6開發版
同樣切換到項目目錄:
cd project
composer create-project topthink/think=6.0.x-dev tp6
這里筆者用的是開發版,但是出現openssl錯誤:
在php.ini中把openssl擴展開啟就行了.
然后會多一個叫tp6的文件夾.
4.2.6 調試模式
默認是部署模式,開發階段可以修改APP_DEBUG開啟調試模式.使用create-project安裝的tp6默認會帶一個.example.env的文件,默認已開啟調試模式:
4.2.7 測試
php think run
提示:
瀏覽器輸入:
http://localhost:8000
默認用的是8000端口,可以使用-p指定端口,比如80端口:
php think run -p 80
然后使用
http://localhost
訪問.
5 規范
6 單應用模式與多應用模式
PHP支持多應用部署,實際目錄結構取決於單應用還是多應用模式.
默認安裝后的目錄結構是單應用模式.多應用模式與單應用模式的主要不同就是app目錄,多應用模式下面有多個應用目錄,而單應用模式默認只有一個controller,而且官方建議多應用模式的話把controller刪除,系統會根據該目錄作為判斷是否是單應用的依據.
7 目錄結構
相對於TP5.1,TP6的主要變化是核心框架納入vendor,原來的application變為app目錄.
這里以單應用模式進行目錄結構的說明,項目目錄下(這個例子是上面安裝的tp6目錄)有8個子目錄:app,config,extend,public,route,runtime,vendor,view.
7.1 app
app是應用目錄,包含一個controller控制器目錄(默認有一個Index.php)與以下php文件:
- AppService.php:應用服務類,包含服務注冊與服務啟動兩個方法.
- BaseController.php:控制器基礎類,包含驗證初始化方法.
- common.php:應用公共文件,默認為空.
- event.php:事件定義文件.
- ExceptionHandle.php:應用異常處理類.包括記錄與渲染方法.
- middleware.php:全局中間件定義文件,默認返回空.
- provider.php:容器provider定義文件.
- Request.php:應用請求對象類,繼承於think\Request.
- service.php:系統服務定義文件,服務在完成全局初始化之后執行.
除此之外還有一個叫.htaccess的文件,這個也叫分布式配置文件,全稱是Hypertext Access,提供了針對目錄改變配置的方法,即在一個特定的文檔目錄放置一個包含一個或多個指令的文件,以作用於此目錄及其所有子目錄.
.htacess是Apache服務器的一個配置文件,負責相關目錄下的網頁配置,通過.htaccess可以實現網頁301重定向,自定義404錯誤頁面等功能.默認是
deny from all
無條件禁止訪問.
7.2 config
config是配置目錄,包含以下php文件:
- app.php:應用配置文件,包含應用地址,應用命名空間,是否開啟路由,默認應用,默認時區,應用映射,域名綁定,禁止RUL訪問的應用列表,異常頁面的模板文件,錯誤顯示信息,顯示錯誤信息等配置.
- cache.php:緩存設置,包括默認緩存驅動,驅動方式,緩存保存目錄,緩存前綴,緩存有效期,緩存標簽前綴,序列化機制等配置.
- console.php:控制台配置,默認包含指令定義的配置.
- cookie.php:cookie配置,包括保存時間,保存路徑,有效域名,是否啟用安全傳輸,是否使用setcookie,httponly等配置.
- database.php:數據庫配置,包含數據庫連接(包括類型,地址,庫名,用戶名,密碼,連接參數,默認編碼,表前綴,部署方式:0代表集中式,1代表分布式,是否開啟讀寫分離,讀寫分離后的主服務器數量,指定的從服務器序號,是否嚴格檢查字段存在,是否斷線重連,監聽SQL,開啟字段緩存,字段緩存路徑),時間查詢規則,自動寫入時間戳字段,時間字段取出后的默認格式等配置.
- filesystem.php:文件系統配置,包含默認磁盤,磁盤列表,磁盤類型,磁盤路徑,磁盤路徑對應的外部URL路徑,可見性等配置.
- lang.php:多語言配置,包括默認語言,允許的語言列表,多語言自動偵測變量名,是否使用cookie,多語言cookie變量,擴展語言包,Accept-Language轉義為對應的語言包名稱,是否支持語言分組等配置.
- log.php:日志配置,包括默認日志記錄通道(包括日志記錄方式,保存目錄,單文件日志寫入,獨立日志級別,最大日志文件數量,使用JSON格式記錄,日志處理器,是否關閉通道日志寫入,日式出書格式化格式,是否實時寫入),日志記錄級別,日志類型記錄通道,是否關閉全局日志寫入,全局日志處理器等配置.
- middleware.php:中間件配置.
- route.php:路由配置,包括pathinfo分隔符,URL偽靜態后綴,URL普通方式參數,是否開啟 路由延遲解析,是否強制使用路由,合並路由規則,路由是否完全匹配,訪問控制器層名稱,空控制器名,是否使用控制器后綴,是否開啟請求緩存,請求緩存有效期,全局請求緩存排除規則,默認控制器名,默認操作名,操作方法后綴,默認JSONP格式返回處理方法,默認JSONP處理方法等配置.
- session.php:會話配置,包括會話名稱,會話ID,驅動方式,存儲連接標識,過期時間,前綴等配置.
- trace.php:Trace配置,開啟調試模式后有效.
- view.php:模板配置,包括模板引擎類型,默認模板渲染規則,模板目錄名,模板后綴,模板文件名分隔符,模板引擎普通標簽開始/結束標識,標簽庫標簽開始/結束標記等配置.
7.3 extend
擴展類庫目錄,默認只有一個.gitignore.
7.4 public
對外訪問目錄,默認包含:
- static文件夾:靜態資源文件夾,默認帶一個.gitignore.
- .htaccess:Apache配置文件,用於Apache的重寫.
- favicon.ico:標簽圖標.
- index.php:入口文件.
- robots.txt:一個遵循Robots協議(也叫爬蟲協議,機器人協議等,全稱為網絡爬蟲排除標准)的txt,是搜索引擎中訪問網站時要查看的第一個文件,告訴蜘蛛程序在服務器上什么文件是可以被查看的.默認的配置表示所有的搜索引擎可以查看,禁止列表為空.
- router.php:快速測試文件.
7.5 route
路由定義目錄,默認包含一個app.php,路由定義文件.
7.6 runtime
應用的運行時目錄,默認只有.gitignore.
7.7 vendor
Composer類庫目錄,包含
- bin:包含一個叫var-dump-server的腳本與一個叫var-dump-server.bat批處理文件,是Laravel5.7的新特性,引入Laravel Dump Server擴展包.
- composer:包含一些自動加載的php文件(autoload_classmap.php,autoload_files.php,autoload_namespaces.php,autoload_psr4.php,autoload_real.php,autoload_static.php)與一個類加載器ClassLoader.php,還有一個installed.json,包含一些安裝信息.
- league:Laravel基於Frank de Jonge開發的PHP包Flysystem,提供了強大的文件系統抽象層處理,Laravel集成Flysystem以便使用不同的驅動簡化對文件系統的操作.
- opis:閉包處理相關.
- psr:PHP規范處理,包括PSR緩存,PSR簡單緩存,PSR容器以及PSR日志.
- symfony:基於MVC架構的PHP框架Symfony.
- topthink:TP框架,包括四個子文件夾:framework,think-helper,think-orm,think-trace.framework是TP6框架核心,think-helper是TP6常用的一些擴展類庫,think-orm是基於PHP7.1+和PDO實現的ORM,支持多數據庫,think-trace是TP6頁面Trace擴展,支持Html頁面和瀏覽器控制台兩種方式輸出.
- autoload.php:Composer生成的自動加載文件.
- services.php:安裝TP自動生成的文件,默認返回一個長度為1的數組.
7.8 view
視圖目錄,如果不適用視圖可以刪除該目錄.
8 配置
8.1 單應用配置
單應用模式的根目錄下的config目錄就是所有配置文件,里面的文件會被自動讀取,如果存在子目錄可以通過Config的load方法手動加載,如:
//加載config/extra/config.php,讀取到extra.
\think\facade\Config::load('extra/config','extra');
8.2 多應用配置
多應用配置的話根目錄下的config就是全局配置文件,而每個應用的配置文件在對應的應用目錄下的config中,相同的參數會覆蓋全局配置.
|--app
| |--app1
| | |--config(應用配置)
| | | |--xxxconfig.php
| | | |...
| |--app2
| | |--config(應用配置)
| | | |--xxxconfig.php
| | | |...
|--config(全局配置)
| |--xxxconfig.php
8.3 環境變量
官方建議,除了一級配置外,配置參數的名字建議使用小寫,以下配置只能在環境變量中修改:
app_debug | 描述 |
---|---|
app_debug | 應用調試模式 |
config_ext | 配置文件后綴 |
開發過程中的.env文件(默認為.example.env)可以模擬環境變量配置,采用ini格式.
如果部署環境中單獨使用配置了環境變量(前綴PHP_),需要刪除.env配置文件避免沖突.
獲取環境變量需要先引入think\facde\Env,然后使用:
Env::get('xxx');
獲取.環境變量獲取不區分大小寫,支持默認值.
8.4 Config類
使用Config類需要先引入:
use think\facade\Config
用以下方法讀取一級配置:
Config::get('app');
讀取單個配置參數:
Config::get('app.app_name');
判斷是否存在某個設置參數:
Config::has('template');
設置參數:
Config::set(['name1'=>'value1','name2'=>'value2'],'config');
8.5 使用Yaconf進行配置處理
8.5.1 Yaconf介紹
Yaconf是一個高性能的配置管理擴展,在PHP啟動時處理所有要處理的配置,所有配置的內容都是immutable的,支持豐富的配置類型,包括字符串,數組,分節,分節繼承,並且可以在配置中直接寫PHP常量與環境變量等.
8.5.2 使用
TP中使用的Yaconf不支持動態設置,使用前需要先安裝think-yaconf擴展,安裝之后不再區分全局與應用配置.
安裝think-yaconf擴展:
composer require topthink/think-yaconf
在app下的provider.php添加:
'think\Config' => '\think\Yaconf'
然后使用setYaconf指定Yaconf使用的獨立配置文件,如:
think\facade\Config::setYaconf('thinkphp');
設置后只需要在thinkphp.ini一個文件進行項目的配置.
更多Yaconf用法戳這里.
如果覺得文章好看,歡迎點贊.
同時歡迎關注微信公眾號:氷泠之路.