2016-01-28 9 views

risposta

6

Ecco un estratto dal libro - Programmazione Phoenix:

"A volte, potrebbe essere necessario Phoenix a fare qualche sollevamento di carichi pesanti per trasformare le opzioni Questo è il lavoro della funzione init init avviene al momento della compilazione... Plug userà il risultato di init come secondo argomento da chiamare, poiché spesso viene chiamato in fase di compilazione, è il posto perfetto per convalidare le opzioni e preparare parte del lavoro, in modo che la chiamata possa essere il più veloce possibile. chiamare è il cavallo di battaglia, vogliamo che faccia il minor lavoro possibile. "

Ad esempio - Utilizzo di una spina nel file routes.ex

pipeline :api do 
    plug :accepts, ["json"] 
    plug Example.Authenticated, repo: Example.Repo 
    end 

repo: Example.Repo è opzioni vengono passati - alla funzione init all'interno Example.Repo

defmodule Example.Authenticated do 
    import Plug.Conn 

    def init(opts) do 
    Keyword.fetch!(opts, :repo) 
    end 

    def call(conn, repo) do 
    ... 
    end 

end 

sto assumendo nel caso di Plug.Router - a modifiche in fase di compilazione potrebbero essere - caricamento dei moduli che costruisce/modifica percorsi - possibilmente da una fonte esterna? Dipende da cosa stai cercando di ottenere.

+1

Questa dovrebbe essere la risposta. Sono un nuovo utente di Phoenix e Plug, e l'aspetto della compilazione non è ovvio dai documenti online. Non riuscivo a capire perché una semplice funzione di test di registrazione non venisse colpita, ma dato che è in fase di compilazione questo ha senso. – ibgib