多租戶 SaaS 的團隊 Scope
若要以團隊(tenant)而非個人使用者為單位管理旗標,可將預設 scope 改為團隊。Feature::active('billing-v2') 就會自動以目前團隊為對象。只要屬於同一團隊,不論成員是誰結果都相同,UI 一致性因此得以保持。
以下是依團隊註冊日期進行漸進式發佈的範例。
緊急 Kill Switch(活用 before 方法)
正式環境發生錯誤時,可不回滾程式碼即刻停用該功能。在類別型 feature 加上 before 方法後,會先於儲存值進行檢查。
FEATURES_NEW_CHECKOUT_DISABLED=true,就能不動 DB 即停用該功能。是不需部署的 kill switch。
排程式發佈
想在特定日期時間自動全面公開的情境,可用before 方法實作。
2025-04-01 就會自動對所有使用者公開。無須部署、無須 DB、無須 Artisan 指令即可自動化。
Dark Launch(Shadow Mode)
不讓使用者看見新邏輯,但以正式環境資料執行並與舊邏輯比較結果的模式。若無問題只要打開旗標即可完成發佈。recommendation-v2 即可。
用事件收集 A/B 測試結果
官方文件雖有提到FeatureRetrieved 事件,但沒有實際的 A/B 測試彙整模式。
FeatureResolved 事件只有在 feature 的值首次被解析時才會觸發。可用它記錄使用者被分派的變體。
FeatureResolved 與 FeatureRetrieved 的差異:FeatureResolved 只在首次評估時觸發,FeatureRetrieved 則在每次檢查時都觸發。分派紀錄用 FeatureResolved,頁面瀏覽追蹤用 FeatureRetrieved 較合適。佇列 Job 中的 scope
佇列 Job 中沒有認證使用者,因此 feature 檢查可能行為出乎意料。請讓 Job 明確帶著 scope。用 Artisan 指令做管理 UI
只要建立一個簡單的 Artisan 指令,就能無須部署地操作正式環境旗標。安全地重構 feature 名稱(Name 屬性)
重新命名類別型 feature 時,若 DB 中儲存的旗標名稱一起改變,所有使用者的旗標會被重置。可用 Name 屬性固定儲存名稱。
總結
掌握官方文件的基本後,以下模式能真正發揮 Pennant 的價值。Laravel Pennant 指南
安裝到基本用法請參考指南頁面。