elixir - mac - phoenix framework tutorial
¿Cómo se lee la variable de configuración en Phoenix/Elixir? (5)
Digamos que en el archivo dev.ex tiene una variable de configuración
config :app_name, AppName.Endpoint,
api_prefix: "api/v2",
api_host: "http://0.0.0.0",
api_port: "3000"
Puedes buscar las tres variables de configuración
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]
Me gustaría establecer el título de mi aplicación en my/config/config.exs
archivo my/config/config.exs
:
config :my, My.Endpoint,
url: [host: "localhost"],
root: Path.dirname(__DIR__),
secret_key_base: "secret",
title: "My App"
¿Cómo puedo leer el title
más tarde para usarlo en la plantilla? Algo como:
<div>
Title of my app is <%= ??? %>
</div>
Intenté conn.title
y dice que no hay tal clave. Pero, cuando intento conn.secret_key_base
, funciona. ¿Por qué?
La función get_env es parte del módulo de aplicación del núcleo de Elixir / Erlang.
Esta función devuelve el valor de una clave específica en el entorno de la aplicación. Teniendo en cuenta su configuración, accederá a la propiedad del title
esta manera:
Application.get_env(:my, My.Endpoint)[:title]
El tercer parámetro es para pasar un valor predeterminado cuando la clave de configuración no existe.
Para tener una separación clara entre mi configuración personalizada y la configuración para Phoenix y otros módulos que utilicé:
config :ace, :config,
root: Path.dirname(__DIR__),
title: "Ace"
Y luego recuperas el valor usando una llamada get_env como:
iex> Application.get_env(:ace, :config)[:title]
"Ace"
Puede usar Application.get_env(:my, :title)
si observa bajo el capó cómo la configuración es solo una función que agrega valores de configuración a una lista de palabras clave y luego puede acceder a ellos en su aplicación
config/2
toma una clave y la asigna a keyword_list, config/3
toma una clave y agrega la clave con keyword_list como valor.
Dado que está utilizando config/3
, namesapces su configuración en My.Endpoint esto funcionaría Application.get_env(:my, My.Endpoint, :title)