自動加載是 PHP 中的一個概念,在這裡您指定要從哪些目錄加載類。這比使用require或include來加載類要好得多。這也是使用 Composer 套件的要求。
require
include
默認情況下,任何Flight類都會由 Composer 自動加載。但是,如果您想要自動加載自己的類,可以使用Flight::path()方法來指定要從哪個目錄加載類。
Flight
Flight::path()
假設我們有如下目錄樹:
# 示例路徑 /home/user/project/my-flight-project/ ├── app │ ├── cache │ ├── config │ ├── controllers - 包含此項目的控制器 │ ├── translations │ ├── UTILS - 包含僅用於此應用程序的類(這是為了後面的示例故意全部大寫) │ └── views └── public └── css └── js └── index.php
您可能已經注意到,這與此文檔站點的文件結構相同。
您可以像這樣指定要從每個目錄加載:
/** * public/index.php */ // 添加一個路徑給自動加載程序 Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); /** * app/controllers/MyController.php */ // 不需要命名空間 // 建議將所有自動加載的類命名為帕斯卡命名法(每個單詞首字母大寫,沒有空格) // 截至 3.7.2 版本,您可以通過運行 Loader::setV2ClassLoading(false); 來使用帕斯卡_蛇_命名法命名您的類 class MyController { public function index() { // 做一些事情 } }
如果您有命名空間,實際上實現這一點變得非常容易。您應該使用Flight::path()方法來指定應用程序的根目錄(而不是文檔根目錄或public/文件夾)。
public/
/** * public/index.php */ // 添加一個路徑給自動加載程序 Flight::path(__DIR__.'/../');
現在您的控制器可能看起來像這樣。查看下面的示例,但請注意評注中的重要信息。
/** * app/controllers/MyController.php */ // 必須有命名空間 // 命名空間與目錄結構相同 // 命名空間必須遵循與目錄結構相同的大小寫 // 命名空間和目錄不能有任何下劃線(除非 Loader::setV2ClassLoading(false) 已設置) namespace app\controllers; // 建議將所有自動加載的類命名為帕斯卡命名法(每個單詞首字母大寫,沒有空格) // 截至 3.7.2 版本,您可以通過運行 Loader::setV2ClassLoading(false); 來使用帕斯卡_蛇_命名法命名您的類 class MyController { public function index() { // 做一些事情 } }
如果您希望自動加載 utils 目錄中的類,則基本上可以執行相同的操作:
/** * app/UTILS/ArrayHelperUtil.php */ // 命名空間必須與目錄結構及大小寫相匹配(請注意 UTILS 目錄是全部大寫 // 如上面的文件樹所示) namespace app\UTILS; class ArrayHelperUtil { public function changeArrayCase(array $array) { // 做一些事情 } }
截至 3.7.2 版本,您可以運行Loader::setV2ClassLoading(false);,來使用帕斯卡_蛇_命名法命名您的類。這將允許您在類名中使用下劃線。這不建議使用,但對於需要的用戶來說是可用的。
Loader::setV2ClassLoading(false);
/** * public/index.php */ // 添加一個路徑給自動加載程序 Flight::path(__DIR__.'/../app/controllers/'); Flight::path(__DIR__.'/../app/utils/'); Loader::setV2ClassLoading(false); /** * app/controllers/My_Controller.php */ // 不需要命名空間 class My_Controller { public function index() { // 做一些事情 } }