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?
Vous pouvez utiliser Application.get_env(:my, :title)
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.
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]
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"
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)