查看源代码 Phoenix.Param 协议 (Phoenix v1.7.14)
一个将数据结构转换为 URL 参数的协议。
此协议被 URL 助手和 Phoenix 堆栈的其他部分使用。例如,当您编写
user_path(conn, :edit, @user)
Phoenix 知道如何从 @user
中提取 :id
,这要归功于此协议。
默认情况下,Phoenix 为整数、二进制、原子和结构体实现了此协议。对于结构体,假设有一个键 :id
,但您也可以提供一个特定实现。
空值无法转换为参数。
自定义参数
为了自定义任何结构体的参数,可以简单地实现此协议。
然而,为了方便起见,此协议也可以被推导。例如
defmodule User do
@derive Phoenix.Param
defstruct [:id, :username]
end
默认情况下,推导的实现也将使用 :id
键。如果用户不包含 :id
键,则可以使用选项指定该键
defmodule User do
@derive {Phoenix.Param, key: :username}
defstruct [:username]
end
将自动在 URL 中使用 :username
。
当使用 Ecto 时,必须在您的 schema
调用之前调用 @derive
@derive {Phoenix.Param, key: :username}
schema "users" do