如何在Phoenix / Elixir中读取配置变量?

时间:2016-03-01 14:28:33

标签: elixir phoenix-framework

我想在my/config/config.exs文件中设置我的应用标题:

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 个答案:

答案 0 :(得分:55)

get_env函数是Elixir / Erlang核心的Application模块的一部分。

此函数返回应用程序环境中特定键的值。 考虑到您的配置,您将以这种方式访问​​title属性:

Application.get_env(:my, My.Endpoint)[:title]

第三个参数用于在配置密钥不存在时传递默认值。

答案 1 :(得分:27)

您可以使用typeText()

答案 2 :(得分:5)

让我们在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] 

答案 3 :(得分:4)

要明确区分我使用的凤凰和其他模块的自定义配置和配置:

config :ace, :config,
  root: Path.dirname(__DIR__),
  title: "Ace"

然后使用get_env调用检索值,如:

iex> Application.get_env(:ace, :config)[:title]
"Ace" 

答案 4 :(得分:1)

如果你深入了解配置只是一个将配置值添加到关键字列表的功能,以后您可以在应用中访问它们

config/2获取密钥并将其映射到keyword_list, config/3获取密钥并使用keyword_list作为值添加密钥。

由于您使用的是config/3,因此它会在My.Endpoint下命名您的配置,这将有效Application.get_env(:my, My.Endpoint, :title)