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
を試してみるとうまくいきます。どうして?
Application.get_env(:my, :title)
を使用できます
get_env 関数は、Elixir/ErlangコアのApplicationモジュールの一部です。
この関数は、アプリの環境内の特定のキーの値を返します。構成を考慮して、次の方法でtitle
プロパティにアクセスします。
Application.get_env(:my, My.Endpoint)[:title]
3番目のパラメーターは、構成キーが存在しない場合にデフォルト値を渡すためのものです。
Dev.exファイルに設定変数があるとしましょう
config :app_name, AppName.Endpoint,
api_prefix: "api/v2",
api_Host: "http://0.0.0.0",
api_port: "3000"
3つの構成変数すべてをフェッチできます
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]
カスタム構成と、私が使用したphoenixおよびその他のモジュールの構成を明確に区別するには:
config :ace, :config,
root: Path.dirname(__DIR__),
title: "Ace"
そして、次のようなget_env呼び出しを使用して値を取得します。
iex> Application.get_env(:ace, :config)[:title]
"Ace"
フードの下で設定がキーワードリストに設定値を追加する単なる関数であり、後でアプリでそれらにアクセスできるかどうかを見ると
_config/2
_はキーを取得してkeyword_listにマップし、_config/3
_はキーを取得し、keyword_listを値としてキーを追加します。
_config/3
_を使用しているので、My.Endpointの下で設定に名前空間を割り当てます。これはApplication.get_env(:my, My.Endpoint, :title)
になります