Phoenix.Param protocol (Phoenix v1.8.1)
View SourceA protocol that converts data structures into URL parameters.
This protocol is used by Phoenix.VerifiedRoutes
and other parts of the
Phoenix stack. For example, when you write:
~p"/user/#{@user}/edit"
Phoenix knows how to extract the :id
from @user
thanks
to this protocol.
(Deprecated URL helpers, e.g. user_path(conn, :edit, @user)
, work the
same way.)
By default, Phoenix implements this protocol for integers, binaries, atoms,
and structs. For structs, a key :id
is assumed, but you may provide a
specific implementation.
The term nil
cannot be converted to param.
Custom parameters
In order to customize the parameter for any struct,
one can simply implement this protocol. For example for a Date
struct:
defimpl Phoenix.Param, for: Date do
def to_param(date) do
Date.to_string(date)
end
end
However, for convenience, this protocol can also be derivable. For example:
defmodule User do
@derive Phoenix.Param
defstruct [:id, :username]
end
By default, the derived implementation will also use
the :id
key. In case the user does not contain an
:id
key, the key can be specified with an option:
defmodule User do
@derive {Phoenix.Param, key: :username}
defstruct [:username]
end
will automatically use :username
in URLs.
When using Ecto, you must call @derive
before
your schema
call:
@derive {Phoenix.Param, key: :username}
schema "users" do
Summary
Types
@type t() :: term()
All the types that implement this protocol.