2015-12-25 8 views
5

Ho bisogno delle seguenti funzioni in quasi tutti i controller. Esiste un modulo simile a ApplicationController in Elixir?Elixir phoenix dove si dovrebbero mettere gli helper del controller globale

Dove dovremmo inserire questi?

def redirect_if_unauthorized(conn = %Plug.Conn{assigns: %{authorized: false}}, opts) do 
    conn 
    |> put_flash(:error, "You can't access that page!") 
    |> redirect(to: "/") 
    |> halt 
    end 

    def redirect_if_unauthorized(conn = %Plug.Conn{assigns: %{authorized: true}}, opts), do: conn 

risposta

7

Come un modo per andare, è possibile creare un modulo separato e importarlo nel file web.ex nella funzione controller.

Ti piace questa:

defmodule MyApp.Web do 

# Some code... 

    def controller do 
    quote do 

     # Some code ... 

     import MyApp.CustomFunctions 

     # Some code ... 

    do 
    end 

# Some code... 

end 
+0

Esiste una convenzione su dove deve essere posizionato il modulo? – Chris

+0

@Chris Non sono sicuro, immagino che tu possa metterlo ovunque tu pensi che dovresti. Probabilmente però nella cartella 'web', quindi verrebbe ricaricato. – JustMichael

+0

Ok, grazie. Ho messo un po 'di codice in controller/helpers e view/helpers per ora, sembra buono! – Chris

3

Tipicamente questi sarebbe all'interno di una spina, aggiunto al vostro pipeline di routing.

Questo esempio viene utilizzato in programmazione Phoenix:

  • Essi definiscono un modulo Rumbl.Auth con funzione authenticate_user
  • Essi comprendono la spina nella loro router via import Rumbl.Auth, only: [authenticate_user: 2]
  • hanno poi le richieste di tubo attraverso di essa - pipe_through [:browser, :authenticate_user] .
Problemi correlati