Spec-Zone.ru › Phoenix

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()

Все типы, реализующие этот протокол.

Функции

to_param(term)

Типы

t()Исходный код

@type t() :: term()

Все типы, реализующие этот протокол.

Функции

to_param(term)Исходный код

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

Пакет Hex Предпросмотр Hex Скачать версию ePub

Создано с помощью ExDoc (v0.40.3) для языка программирования Elixir

© 2014 Chris McCord
Licensed under the MIT License.
https://phoenix.hexdocs.pm/Phoenix.Param.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API