Phoenix.Param протокол
Исходный кодПротокол для преобразования структур данных в параметры URL.
Этот протокол используется в Phoenix.VerifiedRoutes и других частях стека Phoenix. Например, если написать:
~p"/user/#{@user}/edit"
Благодаря этому протоколу Phoenix знает, как извлечь :id из @user.
(Устаревшие вспомогательные функции URL, например user_path(conn, :edit, @user), работают так же.)
По умолчанию Phoenix реализует этот протокол для целых чисел, бинарных строк, атомов и структур. Для структур предполагается наличие ключа :id, но можно предоставить собственную реализацию.
Термин nil нельзя преобразовать в параметр.
Пользовательские параметры
Чтобы настроить параметр для любой структуры, достаточно реализовать этот протокол. Например, для структуры Date:
defimpl Phoenix.Param, for: Date do
def to_param(date) do
Date.to_string(date)
end
end
Однако для удобства этот протокол также можно вывести автоматически. Например:
defmodule User do @derive Phoenix.Param defstruct [:id, :username] end
По умолчанию выведенная реализация также использует ключ :id. Если в структуре отсутствует ключ :id, его можно указать с помощью параметра:
defmodule User do
@derive {Phoenix.Param, key: :username}
defstruct [:username]
end
будет автоматически использовать :username в URL.
При использовании Ecto необходимо вызвать @derive перед вызовом schema:
@derive {Phoenix.Param, key: :username}
schema "users" do Сводка
- t()
Все типы, реализующие этот протокол.
Типы
Функции
Типы
t()Исходный код
@type t() :: term()
Все типы, реализующие этот протокол.
Функции
to_param(term)Исходный код
@spec to_param(term()) :: String.t()
© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/Phoenix.Param.html