2016-02-05 13 views
7

C'è un modo per inserire un plug per eseguire prima il router selezionando il controller/azione? Ho un'app che reindirizzerà al percorso principale per specifici sottodomini, indipendentemente dal percorso corrente su quei domini. Quindi:Come aggiungere un plug in Elixir/Phoenix prima del router?

sub.myapp.com/foo/bar dovrebbe reindirizzare a sub.myapp.com/

Ma, per impostazione predefinita, il router dice che non c'è alcun percorso per /foo/bar e interrompe l'esecuzione delle mie spine, il che significa che non colpisce la mia reindirizzamento.

C'è un modo per inserire la spina prima del router scegliendo l'azione/controller?

(Nota:. Sono abbastanza sicuro di poter gestire questo caso con a catch-all route, ma io sono solo curioso di sapere se c'è un modo migliore)

risposta

9

Il router viene chiamato esplicitamente in lib/my_app/endpoint.ex. Puoi aggiungere qualsiasi plug che ti piace in quel file prima di allora.

È possibile scrivere una presa che gestisce i reindirizzamenti e interrompere la connessione prima che il router venga chiamato.

defmodule HelloPhoenix.Endpoint do 
    use Phoenix.Endpoint, otp_app: :hello_phoenix 
    plug Plug.RequestId 
    plug Plug.Logger 
    ... 
    plug CustomRedirectPlug # Add your plug here 
    plug HelloPhoenix.Router 
end 
Problemi correlati