2016-02-05 9 views
7

Gibt es eine Möglichkeit, einen Plug einzufügen, bevor der Router den Controller/die Aktion auswählt? Ich habe eine App, die zum Root-Pfad für bestimmte Subdomains umgeleitet wird, unabhängig vom aktuellen Pfad auf diesen Domains. Also:Wie fügt man ein Elixir/Phoenix vor dem Router ein?

sub.myapp.com/foo/bar umleiten sollte sub.myapp.com/

Aber in der Standardeinstellung sagt der Router es keinen Weg für /foo/bar ist und es hält Ausführung meiner Stecker, dh es ist nie meine Redirect trifft.

Gibt es eine Möglichkeit, meinen Stecker zu stecken, bevor der Router die Aktion/Controller wählt?

. (Anmerkung: Ich bin mir ziemlich sicher, dass ich diesen Fall mit a catch-all route umgehen kann, aber ich bin nur neugierig, ob es ein besserer Weg gibt)

Antwort

9

Ihren Router explizit in lib/my_app/endpoint.ex genannt wird. Sie können alle Plugs, die Sie in dieser Datei mögen, vorher hinzufügen.

Sie können einen Stecker schreiben, der die Weiterleitungen behandelt und die Verbindung vor dem Aufruf des Routers anhält.

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 
Verwandte Themen