如何設定 PhpStorm 的 Directories?
PhpStorm 最強的三個功能為 : Refactoring、Debugging、與 Inspection,但由於 PHP 生態是眾多 framework,而每個 framework 的目錄架構也不太一樣,因此必須先在 PhpStorm 設定 directories,才能發揮 PhpStorm 的強悍功能,而不只是文字編輯器而已。
Version
Laravel 5.2.36
提示設定 Directories

當使用 PhpStorm 開啟 Laravel 專案時,一開始會對專案做 indexing,之後就會出現 Detect PSR-0 namespace roots 的提示,要求你設定 Directories。
很多初學者因為不知道設定 Directories 的重要性,就直接將對話框關閉,這是非常可惜的,這將喪失很多 PhpStorm 重要的功能。
手動設定 Directories

按 Settings | Directories 手動設定 Directories。

進入設定 Directories 視窗,若第一次沒由 Detect PSR-0 namespaces roots 設定也沒關係,日後只要在此設定即可。
PhpStorm -> Preferences -> Directories
接下來要設定 Tests、Sources、Excluded 與 Resource Root 4 個目錄。
Sources
設定 PSR-0 namespace roots 的主目錄,也就是 Laravel 的 app 目錄。

選擇 app 目錄,按上方的 Sources,會在右側出現 Source Folders app。

按 P 設定該目錄的 property。

在 Package prefix 輸入 App,因為 app 目錄對應的正是 Laravel 的 namespace App。
這是所有 directories 設定中最重要的一個,在 Laravel 5 之後,全面使用 namespace,管理 namespace 成為很多人的惡夢,但只要設定了 Sources 之後,將來 PhpStorm 會幫我們管理 namespace。

設定了 Sources 之後,在 project windows 的 app 會顯示藍色。

假如我們想在自己建立的 Services 目錄下,建立其他 class 寫商業邏輯。1 1關於 Service 模式,詳細請參考如何使用 Service 模式?
選擇 Services 目錄,按熱鍵 ⌘ + N,顯示 New 視窗,選擇 PHP Class。

自行輸入 class 名稱,值得注意的是,PhpStorm 已經自動幫我們準備好 namespace,不必我們操心。

程式碼也幫我們管理好 namespace 了。2 2GitHub Commit : 建立 OrderService

若想要注入其他物件,可在 constructor 的參數以 type hint 方式注入。3 3關於依賴注入,詳細請參考深入探討依賴注入
如我們想注入 User,但 PhpStorm 已經反白警告找不到 User class。

選擇反白的 User,按熱鍵 ⌥ + ↩,選擇 Import class。

若整個專案只有一個同名的 class,PhpStorm 會自動 import,否則會出現視窗讓你決定要 import 哪一個 class。

PhpStorm 自動幫我們 use 了 App\User。4 4GitHub Commit : 注入 User
Tests
設定測試程式的主目錄,也就是 Laravel 的 tests 目錄。

選擇 tests 目錄,按上方的 Tests,會在右側出現 Test Source Folders tests。

設定了 Tests 之後,在 project windows 的 tests 會顯示綠色。

可在 project windows 選擇 Tests。

將只顯示所有測試程式,方便測試時使用。
Resource Root
設定前端資源的主目錄,也就是 Laravel 的 public 目錄。

選擇 public 目錄,按上方的 Resource Root,會在右側出現 Resource roots public。

設定了 Resource roots 之後,在 project windows 的 public 會顯示紫色。

在 resources/views/welcome.blade.php 加上 Vue.js 後,在 js/app.js 出現反白。5 5GitHub Commit : 修改 welcome.blade.php
PhpStorm 抱怨找不到 js/app.js,的確我們在 public 目錄下還沒有建立 js/app.js。

在 public 目錄下新增 js/app.js 之後,PhpStorm 就不在警告了。6 6GitHub Commit : 新增 js/app.js
Excluded
不由 PhpStorm 管理,或不想由 PhpStorm 建立 index 的目錄。
實務上若你在專案目錄下,會自己建立一個目錄放 Spec 或相關文件,如 pdf, docx, xlsx 格式,這個目錄交給 PhpStorm 管理並沒有任何意義,只會增加建立 index 時間而已,就可以將該目錄設定為 Excluded。
Conclusion
- 這些都是很重要的設定,可惜 PhpStorm 文件並沒有仔細介紹,以上都是實際使用 PhpStorm 一段時間之後摸索出來的心得,將這些目錄設定之後,才能發揮 PhpStorm 強悍功能。
Sample Code
完整的範例可以在我的 GitHub 上找到。