查看源代码 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

总结

类型

t()

所有实现此协议的类型。

类型

@type t() :: term()

所有实现此协议的类型。

函数

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