web-dev-qa-db-fra.com

Comment lire la variable de configuration dans Phoenix / Elixir?

Je souhaite définir le titre de mon application dans my/config/config.exs fichier:

config :my, My.Endpoint,
  url: [Host: "localhost"],
  root: Path.dirname(__DIR__),
  secret_key_base: "secret",
  title: "My App"

Comment puis-je lire title plus tard pour l'utiliser dans le modèle? Quelque chose comme:

<div>
  Title of my app is <%= ??? %>
</div>

J'ai essayé conn.title et il dit qu'il n'y a pas une telle clé. Mais quand j'essaie conn.secret_key_base Ça marche. Pourquoi?

41
Alexey Petrushin

Vous pouvez utiliser Application.get_env(:my, :title)

30
Sasha Fonseca

La fonction get_env fait partie du module Application du noyau Elixir/Erlang.

Cette fonction renvoie la valeur d'une clé spécifique dans l'environnement de l'application. Compte tenu de votre configuration, vous accéderiez à la propriété title de cette façon:

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

Le troisième paramètre sert à transmettre une valeur par défaut lorsque la clé de configuration n'existe pas.

60

Disons que dans le fichier dev.ex vous avez une variable de configuration

config :app_name, AppName.Endpoint,
  api_prefix: "api/v2",
  api_Host: "http://0.0.0.0",
  api_port: "3000"

Vous pouvez récupérer les trois variables de configuration

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] 
7
Jagdish N

Pour avoir une séparation claire entre ma configuration personnalisée et la configuration pour Phoenix et les autres modules que j'ai utilisés:

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

Et puis vous récupérez la valeur en utilisant un appel get_env comme:

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

si vous regardez sous le capot comment la configuration est juste une fonction qui ajoute des valeurs de configuration à une liste de mots clés et plus tard vous pouvez y accéder dans votre application

config/2 Prend une clé et la mappe à keyword_list, config/3 Prend une clé et ajoute la clé avec keyword_list comme valeur.

Puisque vous utilisez config/3, Il nomme votre configuration sous My.Endpoint, cela fonctionnerait Application.get_env(:my, My.Endpoint, :title)

2
allyraza