Как читать переменную конфигурации в Phoenix / Elixir?
Я хотел бы установить название моего приложения в :
config :my, My.Endpoint,
url: [host: "localhost"],
root: Path.dirname(__DIR__),
secret_key_base: "secret",
title: "My App"
как я могу читать title
позже использовать его в шаблоне? Что-то вроде:
<div>
Title of my app is <%= ??? %>
</div>
пробовал conn.title
и он говорит, что нет такого ключа. Но, когда я пытаюсь conn.secret_key_base
это работает. Почему?
5 ответов
на get_env функция является частью модуля приложения из ядра Elixir/Erlang.
эта функция возвращает значение определенного ключа в среде приложения.
Учитывая вашу конфигурацию, вы получите доступ к title
собственность таким образом:
Application.get_env(:my, My.Endpoint)[:title]
третий параметр предназначен для передачи значения по умолчанию, когда конфигурационный ключ не существует.
чтобы иметь четкое разделение между моей пользовательской конфигурацией и конфигурацией для phoenix и других модулей, которые я использовал:
config :ace, :config,
root: Path.dirname(__DIR__),
title: "Ace"
и затем вы получаете значение, используя вызов get_env, например:
iex> Application.get_env(:ace, :config)[:title]
"Ace"
скажем в dev.ex файл у вас есть переменные конфигурации
config :app_name, AppName.Endpoint,
api_prefix: "api/v2",
api_host: "http://0.0.0.0",
api_port: "3000"
вы можете получить все три переменные конфигурации
Application.get_env(:app_name, AppName.Endpoint)[:api_prefix]
Application.get_env(:app_name, AppName.Endpoint)[:api_host]
Application.get_env(:app_name, AppName.Endpoint)[:api_port]
если вы посмотрите под капотом, как конфигурация-это просто функция, которая добавляет значения конфигурации в список ключевых слов, и позже вы можете получить к ним доступ в своем приложении
config/2
берет ключ и сопоставляет его с keyword_list,
config/3
берет ключ и добавляет ключ с keyword_list в качестве значения.
если вы используете config/3
это namesapces ваша конфигурация под моим.Конечная точка это будет работать Application.get_env(:my, My.Endpoint, :title)