Skip to main content

什麼是 InteractsWithData trait

Illuminate\Support\Traits\InteractsWithData 是彙整了「對於類陣列輸入資料的共通 API」的 trait。 此 trait 本身僅要求 all()data() 兩個抽象方法,將實際資料的取得邏輯委派給各類別。取而代之,其提供如下的高頻使用方法。
  • 存在判定:has(), hasAny(), exists(), missing()
  • 空判定:filled(), isNotFilled(), anyFilled()
  • 條件執行:whenHas(), whenFilled(), whenMissing()
  • 擷取:only(), except()
  • 型別轉換:string(), boolean(), integer(), float(), date(), enum(), collect()

與 Request 系方法的關係

request() helper 取得的 Illuminate\Http\Request,透過 Concerns\InteractsWithInput 引入 InteractsWithData 因此下列日常的輸入存取都經由 trait 提供。
Request::get() 是位於 Request 類別本體的 Symfony 相容方法。於 Laravel 13 的原始碼上也明確標示 @deprecated use ->input() instead,建議使用 input()

Laravel Core 的主要實作範例

直接 use InteractsWithData 的類別

具相近職責的相關實作

  • Illuminate\Session\Store 自行實作了 has(), get(), only(), except() 等相近 API
  • Illuminate\Validation\Concerns\ValidatesAttributes 提供驗證判斷邏輯,輸入存取 API 本身於設計上與 InteractsWithData 分屬不同職責

trait 與主要類別的關係

於套件開發中整合至自訂類別

InteractsWithData 適用於套件內「保持輸入陣列並提供 Laravel 風格取得 API」的類別。
1

建立資料容器類別

2

以型別化的存取子安全讀取

實務使用情境

  • 外部 API Client 的選項 bag
  • Webhook payload 的正規化層
  • 套件的設定 override 解析類別
只要實作 all()data(),就無需每次自行撰寫輸入存取 API,可降低維護成本。

相關頁面

最後修改於 2026年8月2日