2016-02-05 8 views
7

Czy istnieje sposób na wstawienie wtyczki do uruchomienia przed routerem wybierając kontroler/akcję? Mam aplikację, która przekieruje do ścieżki głównej określonych subdomen, niezależnie od bieżącej ścieżki w tych domenach. Więc:Jak dodać wtyczkę Elixir/Phoenix przed routerem?

sub.myapp.com/foo/bar należy przekierować do sub.myapp.com/

Ale domyślnie router mówi nie ma ścieżki do /foo/bar i wstrzymuje wykonanie moich wtyczek, co oznacza, że ​​nigdy nie uderza mój przekierowanie.

Czy istnieje sposób na włożenie wtyczki zanim router wybierze działanie/kontroler?

(Uwaga:. Jestem całkiem pewien, że mogę obsługiwać tę sprawę z a catch-all route, ale jestem po prostu ciekawy, czy jest jakiś lepszy sposób)

Odpowiedz

9

Router nazywa się wyraźnie w lib/my_app/endpoint.ex. Możesz dodać wszystkie wtyczki, które lubisz w tym pliku wcześniej.

Można napisać wtyczkę, która obsługuje przekierowania i zatrzymuje połączenie przed wywołaniem routera.

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