文件入口的功能與定義
檔案入口定義
#6.0預設的應用程式入口檔案位於public/index.php,預設內容如下:
// [ 应用入口文件 ] namespace think; require __DIR__ . '/../vendor/autoload.php'; // 执行HTTP应用并响应 $http = (new App())->make('http'); $response = $http->run(); $response->send(); $http->end($response);
如果你沒有特殊的自訂需求,無需對入口檔案做任何的更改。
入口檔案位置的設計是為了讓應用程式部署更安全,請盡量遵循public目錄為唯一的web可存取目錄,其他的檔案都可以放到非WEB存取目錄下方。
控制台入口文件
除了應用入口檔案外,系統還提供了一個控制台入口文件,位於專案根目錄的think(注意該文件沒有任何的後綴)。
該檔案程式碼如下:
#!/usr/bin/env php <?php namespace think; // 加载基础文件 require __DIR__ . '/vendor/autoload.php'; // 应用初始化 (new App())->console->run();
控制台入口檔案用於執行控制台命令,例如:
php think version
系統內建了一些常用的控制台命令,如果您安裝了額外的擴展,也會增加對應的控制台指令,都是透過該入口檔案執行的。
如果app目錄下面直接是controller、model以及view等類別庫目錄,則為單一應用模式(預設模式),如果在app目錄下建立了應用子目錄,則自動變成多應用模式。
單一應用程式和多應用程式的目錄結構差異如下(主要在app目錄)。
單一應用模式
├─app 應用程式目錄
│ ├─controller 控制器目錄
##│ ├─model# #│ ├─view 檢視目錄│ └─ ... # 目錄目錄目錄目錄」 WEB目錄(對外存取目錄)│ ├─index.php 入口檔案│ ├─router.php 快速測驗檔案 ├─config 應用程式設定目錄 ├─route #多應用模式
├─app 應用目錄│ ├─index 主應用│ │ ├─ 模型目錄
│ │ ├─view 檢視目錄│ │ ├─config /設定目錄 (優先) 目錄(優先)⠔ ⠔ 更多類別庫目錄 │ ├─admin 後台應用程式
│ │ ├─controller 控制器目錄
│ │ ├─model 模型目錄
#view⠔ 1 #│ │ ├─config 設定目錄(優先)│ │ └─ ... 更多類別庫目錄│├─public # │ ├─admin.php 後台入口檔案│ ├─index.php 入口檔案 htaccess 用於apache的重寫│├─config 應用程式設定目錄│ ├─index admin應用配置│├─route 路由定義目錄 │ ├─index admin應用路由定義目錄│├─runtime 運轉時目錄│ ├─index 1 1 admin應用運行時目錄從目錄結構可以看出來,每個應用相對保持獨立,並且每個應用都有一個對應的入口文件,應用下面還可以透過多層控制器來維護控制器分組。 多重應用程式使用不同的入口的情況下,每個入口檔案的內容都是一樣的,預設入口檔案名稱(不含後綴)就是套用名,如果您的入口檔案名稱和應用程式不一致,例如你的後台admin應用,入口檔案名稱使用了think.php,那麼入口檔案需要改成:// [ 应用入口文件 ] namespace think; require __DIR__ . '/../vendor/autoload.php'; // 执行HTTP应用并响应 $http = (new App())->make('http'); $response = $http->name('admin')->run(); $response->send(); $http->end($response);單一應用程式和多應用模式會影響一些系統路徑的值,為了更好的理解本手冊的內容,你可能需要理解下面幾個系統路徑所表示的位置。
目錄位置 | 目錄說明 | 取得方法 |
---|---|---|
專案所在的目錄,預設自動獲取,可以在入口檔案實例化 | App類別的時候傳入。 | App::getRootPath()
|
根目錄下的 | app目錄 | App::getBasePath()
|
目前應用程式所在的目錄,如果是單應用模式則同基礎目錄,如果是多重應用模式,則是 | app/應用程式子目錄 | #App::getAppPath()
|
根目錄下的 | config目錄 | #App::getConfigPath()
|
框架執行階段的目錄,單一應用模式就是根目錄的 | runtime目錄,多重應用模式為runtime /應用程式子目錄
| App::getRuntimePath()
|
框架核心類別庫的 | think目錄
| App::getThinkPath()
|