2015-08-05 5 views
12

Ich versuche, einen Wert aus einer Phoenix-Konfigurationsdatei in einem Controller zu erhalten.Probleme beim Abrufen von Konfigurationswerten innerhalb des Phoenix-Controllers und/oder der Vorlage

# config.exs 

use Mix.Config 

config :app_name, AppName.Endpoint, 
    url: [host: "localhost"], 
    debug_errors: false, 
    root: Path.expand("..", __DIR__) 

Application.get_env(:app_name, :url) zum Beispiel scheint nichts zurück.

Fehle ich etwas?

+0

Beim Lesen des Dokuments scheint es, dass Sie diese env-Variablen innerhalb der 'application' -Funktion in der Datei' mix.exs' definieren können, nicht innerhalb der Config. http://elixir-lang.org/docs/v1.0/elixir/Application.html – Kernael

Antwort

18

Wie Sie im docs for the Mix.Config module sehen können, gibt es zwei Varianten von config: config/2 und config/3. Sie verwenden die config/3 Variante, wie Sie drei Argumente sind vorbei:

  • :app_name
  • AppName.Endpoint
  • eine Keyword-Liste ([url: ..., debug_errors: ...])

Das bedeutet, dass Sie die zu konfigurierenden Geben Sie AppName.Endpoint in die Umgebung der Anwendung :app_name ein und legen Sie den Wert für die Schlüsselwortliste fest (denken Sie daran, dass AppName.Endpoint nur ein Atom, also ist es in Ordnung, es als Schlüssel zu benutzen). Um die URL abrufen, würden Sie brauchen so etwas wie zu tun:

Application.get_env(:app_name, AppName.Endpoint)[:url] 

Aus Gründen der Vollständigkeit ermöglicht config/2 mehrere Schlüssel-Wert-Paare in der env für eine Anwendung zu setzen. Seine Argumente sind in der Tat der Name der Anwendung und eine Liste der Schlüssel-Wert-Paare.

+0

Das war richtig! Danke für die gründliche Erklärung. – Tayler

Verwandte Themen