瀏覽原始碼 Phoenix.Param 協定 (Phoenix v1.7.14)

將資料結構轉換為 URL 參數的協定。

此協定由 URL 輔助程式和 Phoenix 堆疊的其他部分使用。例如,當您撰寫

user_path(conn, :edit, @user)

Phoenix 會透過此協定來從 @user 中萃取出 :id

Phoenix 預設會針對整數、二進位資料、原子和結構體實作此協定。對於結構體,預設會假設一個 :id 鍵,但您可以提供特定的實作。

Nil 值無法轉換為參數。

自訂參數

為了客製化任何結構體的參數,只要實作此協定即可。

不過,為方便起見,此協定也可以派生。例如

defmodule User do
  @derive Phoenix.Param
  defstruct [:id, :username]
end

預設情況下,派生的實作也會使用 :id 鍵。萬一使用者不包含 :id 鍵,可以使用選項來指定鍵

defmodule User do
  @derive {Phoenix.Param, key: :username}
  defstruct [:username]
end

將自動在網址中使用 :username

使用 Ecto 時,您必須在 schema 呼叫前呼叫 @derive

@derive {Phoenix.Param, key: :username}
schema "users" do

摘要

型別

t()

所有實作此協定的型別。

型別

@type t() :: term()

所有實作此協定的型別。

函式

@spec to_param(term()) :: String.t()