正確設定 Directories 才能發揮 PhpStorm 的威力

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

不建議使用 automatically 由 PhpStorm 自動設定 directories,這將導致 vendor 目錄被設定在 Excluded 下,導致 Laravel 與其他 package 的語法提示不正常。

進入設定 Directories 視窗,若第一次沒由 Detect PSR-0 namespaces roots 設定也沒關係,日後只要在此設定即可。

PhpStorm -> Preferences -> Directories

接下來要設定 TestsSourcesExcludedResource 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\User4 4GitHub Commit : 注入 User

無論是建立 namespace,或者引用 namespace,完全由 PhpStorm 自動幫我們處理,不用擔心 namespace 大小寫寫錯,也不用擔心 namespace 的完整路徑為何。

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

Resource roots 不是設定在 Laravel 的 resources 目錄,而是設定在 public 目錄。藉由此設定,PhpStorm 可以幫你檢查 Blade 或 HTML 的 JavaScript 與 CSS 路徑是否合法。

Excluded


不由 PhpStorm 管理,或不想由 PhpStorm 建立 index 的目錄。

實務上若你在專案目錄下,會自己建立一個目錄放 Spec 或相關文件,如 pdf, docx, xlsx 格式,這個目錄交給 PhpStorm 管理並沒有任何意義,只會增加建立 index 時間而已,就可以將該目錄設定為 Excluded

Conclusion


  • 這些都是很重要的設定,可惜 PhpStorm 文件並沒有仔細介紹,以上都是實際使用 PhpStorm 一段時間之後摸索出來的心得,將這些目錄設定之後,才能發揮 PhpStorm 強悍功能。

Sample Code


完整的範例可以在我的 GitHub 上找到。

2016-06-10