2016-03-01 20 views
23

Chciałbym ustawić tytuł mojej aplikacji w my/config/config.exs pliku:Jak odczytać zmienną konfiguracyjną w Phoenix/Elixir?

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

Jak można odczytać title później użyć go w szablonie? Coś jak:

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

Próbowałem conn.title i powiedział, że nie ma takiego klucza. Ale kiedy próbuję conn.secret_key_base to działa. Czemu?

Odpowiedz

19

Można użyć Application.get_env(:my, :title)

+3

Dzięki, ale to nie zadziałało, jest puste. –

+0

Musisz mieć pliki dev.exs, prod.exs i test.exs, aby pobrać bieżące konfiguracje środowiska. –

+2

Ta odpowiedź jest nieprawidłowa, przynajmniej w moim systemie. [tiagohngl] (https://stackoverflow.com/a/35754803/118220) daje właściwą inkantację. – Cheezmeister

2

jeśli spojrzeć pod maską jak config jest tylko funkcja dodawania wartości konfiguracyjne do listy słów kluczowych, a następnie można uzyskać do nich dostęp w aplikacji

config/2 bierze klucz i zamienia go na keyword_list, config/3 bierze klucz i dodaje klucz z keyword_list jako wartością.

Ponieważ używasz config/3 to namesapces Twój config pod My.Endpoint to będzie działać Application.get_env(:my, My.Endpoint, :title)

41

Funkcja get_env jest częścią modułu aplikacyjnego z rdzeniem Elixir/Erlang.

Ta funkcja zwraca wartość dla określonego klucza w środowisku aplikacji. Biorąc pod uwagę konfigurację, byś dostępu do właściwości title w ten sposób:

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

Trzecim parametrem jest do przekazywania wartości domyślnej, gdy klucz konfiguracyjny nie istnieje.