Skip to main content
基本使用方式請參考指南頁面。本頁介紹官方文件中未提及的實務模式。

多租戶 SaaS 的團隊 Scope

若要以團隊(tenant)而非個人使用者為單位管理旗標,可將預設 scope 改為團隊。
僅此一步 Feature::active('billing-v2') 就會自動以目前團隊為對象。只要屬於同一團隊,不論成員是誰結果都相同,UI 一致性因此得以保持。 以下是依團隊註冊日期進行漸進式發佈的範例。
若只想為特定團隊啟用(例如為企業客戶提早提供):

緊急 Kill Switch(活用 before 方法)

正式環境發生錯誤時,可不回滾程式碼即刻停用該功能。在類別型 feature 加上 before 方法後,會先於儲存值進行檢查。
只要設定環境變數 FEATURES_NEW_CHECKOUT_DISABLED=true,就能不動 DB 即停用該功能。是不需部署的 kill switch。
before 回傳 null 時會執行 resolve()。回傳 false 則立即被視為未啟用。除緊急時以外請保持回傳 null

排程式發佈

想在特定日期時間自動全面公開的情境,可用 before 方法實作。
只要一過 2025-04-01 就會自動對所有使用者公開。無須部署、無須 DB、無須 Artisan 指令即可自動化。

Dark Launch(Shadow Mode)

不讓使用者看見新邏輯,但以正式環境資料執行並與舊邏輯比較結果的模式。若無問題只要打開旗標即可完成發佈。
確認 log 沒有差異後,只要把旗標切為 recommendation-v2 即可。

用事件收集 A/B 測試結果

官方文件雖有提到 FeatureRetrieved 事件,但沒有實際的 A/B 測試彙整模式。 FeatureResolved 事件只有在 feature 的值首次被解析時才會觸發。可用它記錄使用者被分派的變體。
若在轉換發生時另外記錄,就能算出每個變體的轉換率。
FeatureResolvedFeatureRetrieved 的差異:FeatureResolved 只在首次評估時觸發,FeatureRetrieved 則在每次檢查時都觸發。分派紀錄用 FeatureResolved,頁面瀏覽追蹤用 FeatureRetrieved 較合適。

佇列 Job 中的 scope

佇列 Job 中沒有認證使用者,因此 feature 檢查可能行為出乎意料。請讓 Job 明確帶著 scope。
也可以在 Job dispatch 時就評估旗標並傳給 Job。

用 Artisan 指令做管理 UI

只要建立一個簡單的 Artisan 指令,就能無須部署地操作正式環境旗標。

安全地重構 feature 名稱(Name 屬性)

重新命名類別型 feature 時,若 DB 中儲存的旗標名稱一起改變,所有使用者的旗標會被重置。可用 Name 屬性固定儲存名稱。
如此一來,即便自由重構類別名稱,DB 資料仍可維持不變。

總結

掌握官方文件的基本後,以下模式能真正發揮 Pennant 的價值。

Laravel Pennant 指南

安裝到基本用法請參考指南頁面。
最後修改於 2026年8月2日