## 關于安裝
`6.0`版本基于PHP`7.1`版本開發,所以你的PHP運行環境必須是PHP`7.1+`(注意有時候你的命令行和WEB的PHP版本是不同的),最新版本已經兼容PHP`8.0`。
>[danger] 新版必須使用`composer`安裝,因為`6.0`完全依賴`composer`使用,如果你**通過git下載安裝將不能正常使用**。如果你使用`composer`安裝ThinkPHP過程特別慢,請使用阿里云鏡像或者科學上網。
對于新手而言,推薦的安裝方式是
```
composer create-project topthink/think tp
```
系統會自動為你生成一個項目所需要的目錄架構和需要的文件。
記住,無論如何,不要在項目里面修改核心框架目錄下的任何文件,除了`vendor`目錄之外的其它目錄都屬于你的項目代碼,可以隨意修改。
安裝完成之后,進入`cmd`控制臺,使用內置指令啟動服務。
```
cd tp
php think run
```
現在你可以開始你的TP6開發之旅了。
在瀏覽器里面輸入
```
http://localhost:8000
```
就會看到熟悉的歡迎頁面(并顯示當前安裝的版本號)

如果需要更改默認端口,可以使用
```
php think run -p 80
```
請確保端口沒有被占用。
>[info] 該指令僅供學習和測試過程使用(免去安裝WEB服務器的麻煩),不建議用于正式上線部署。
## 目錄結構
默認安裝后的目錄結構如下:
~~~cmd
www WEB部署目錄(或者子目錄)
├─app 應用目錄
│ ├─controller 控制器目錄
│ ├─common.php 公共函數文件
│ ├─event.php 事件定義文件
│ ├─ExceptionHandle.php應用異常處理類
│ ├─middleware.php 全局中間件定義文件
│ ├─provider.php 容器綁定定義文件
│ └─Request.php 應用請求對象類
│
├─config 配置目錄
│ ├─app.php 應用配置
│ ├─cache.php 緩存配置
│ ├─console.php 控制臺配置
│ ├─cookie.php Cookie配置
│ ├─database.php 數據庫配置
│ ├─filesystem.php 文件磁盤配置
│ ├─lang.php 多語言配置
│ ├─log.php 日志配置
│ ├─middleware.php 中間件配置
│ ├─route.php URL和路由配置
│ ├─session.php Session配置
│ ├─trace.php Trace配置
│ └─view.php 視圖配置
│
├─view 視圖目錄
├─route 路由定義目錄
│ ├─route.php 路由定義文件
│ └─ ...
│
├─public WEB目錄(對外訪問目錄)
│ ├─index.php 入口文件
│ ├─router.php 快速測試文件
│ └─.htaccess 用于apache的重寫
│
├─extend 擴展類庫目錄
├─runtime 應用的運行時目錄(可寫,可定制)
├─vendor 第三方類庫目錄(Composer依賴庫)
├─.example.env 環境變量示例定義文件(參考)
├─composer.json composer 定義文件
├─LICENSE.txt 授權說明文件
├─README.md README 文件
├─think 命令行入口文件
~~~
系統生成的目錄結構是經過精心設計的,沒有必要做任何的調整,包括入口文件位置。所以確保你的WEB目錄指向`public`目錄而不是應用根目錄。
`app`目錄名對應的同時也是應用的根命名空間(而且不能更改),并且按照`PSR-4`規范進行應用類庫的自動加載。
對于系統的緩存目錄、日志目錄和`Session`目錄都是可以自定義的,但沒有必要自定義`runtime`目錄。
所以,在你對應用的目錄結構進行更改之前,請確認你是否需要這么做,以及你明確知道相應的后果。
## 調試模式
默認安裝后使用的是部署模式,開發過程中應當開啟調試模式,便于調試問題。
把應用根目錄下的`.example.env` 文件重命名為`.env`文件,這是用于本地開發的環境變量定義文件。
該文件默認已經開啟了調試模式(確認是否包含下面一行環境變量定義)。
```
APP_DEBUG = TRUE;
```
ThinkPHP`6.0`版本是不支持通過配置參數開啟調試模式,在提交版本庫的時候會自動忽略`.env`文件,這樣服務器部署后的代碼就是部署模式。
新版默認安裝會安裝`symfony/var-dumper`庫,因此你會看到不同以往樣式的`dump`輸出,并且可以使用其自帶的`dd`輸出并終止執行函數。
如果不喜歡這個調試輸出的風格,可以直接卸載這個擴展而不會有任何的影響,并且依然可以使用`dump`函數。
```
composer remove symfony/var-dumper
```
## 配置文件
新版不再使用慣例配置文件,項目的默認配置(稱之為全局配置,對所有應用適用)在安裝完成后已經自動生成在項目根目錄的`config`目錄下,并且都提供了清晰的注釋。
如果是多應用模式的話,每個應用可以有獨立的配置文件,通常是在應用目錄下的`config`目錄。應用配置文件會覆蓋全局配置文件中的同名參數。
配置文件默認使用PHP數組格式(后綴為`php`),你可以在環境變量中定義配置文件的后綴來改變配置文件定義格式,例如:
```
CONFIG_EXT = ini; // 支持ini/yaml/json格式
```
和之前版本的一個比較大的區別在于配置參數不再支持動態設置,所以下面的用法是不支持的
```
Config::set('app.app_host', 'thinkphp.cn');
```
實際上,大多數時候你甚至不需要去操作配置類(除非在開發一些擴展或中間件的時候需要讀取配置參數),框架會在適當的時候自動加載這些配置,你不需要關心什么時候載入配置,或者什么時候讀取了某個參數。因為你實際操作某個類庫的時候,配置已經讀取完成并自動工作。
>[info] 關于核心框架具體有哪些配置參數,建議你仔細參考根目錄`config`下的一系列配置文件,其中都有詳細的注釋說明。
如果你在開發環境和部署環境需要區分不同的配置,應當使用環境變量并保持一套統一的配置文件,`config`目錄下自動生成的配置文件就大量使用了環境變量,例如數據庫配置文件通常會使用如下配置定義:
```
// 數據庫類型
'type' => Env::get('database.type', 'mysql'),
// 服務器地址
'hostname' => Env::get('database.hostname', '127.0.0.1'),
// 數據庫名
'database' => Env::get('database.database', ''),
// 用戶名
'username' => Env::get('database.username', 'root'),
// 密碼
'password' => Env::get('database.password', ''),
// 端口
'hostport' => Env::get('database.hostport', '3306'),
```
對于本地開發環境,你可以使用前面提到的`.env`文件設置環境變量。
>[danger] 值得引起重視的是,`6.0`版本的`Request`類是沒有任何配置參數的,具體原因后面會提及。
`V6.0.8+`版本開始,可以支持多環境配置文件,例如你可以定義多個環境變量定義文件
```
.env.develop
.env.preview
.env.testing
```
然后可以在入口文件中設置當前使用的環境變量文件名