2016-01-24 12 views
7

Kullanıcıları doğrulayacak bir oturum (gerçekte oturum denetimi) yapacak olan bir Plug yazmayı deniyorum. Rotayı yönlendirirken sorun yaşıyorum. Sanırım, bu fiş aktif hale getirildikten sonra rota oluşumunun gerçekleşmesidir. page_path/2 besbelli var ve işleri düzenli bağlamda undefined function TestApp.page_path/2Phoenix çerçevesindeki bir fişin içindeki yönlendirme

:

Neyse böyle bir hata var.

defmodule TestApp.Plugs.Authenticate do 
    import Plug.Conn 

    def init(default), do: default 

    def call(conn, _) do 
    user = Plug.Conn.get_session(conn, :current_user) 
    if not is_nil(user) do 
     assign(conn, :user, user) 
    else 
     conn 
     |> Phoenix.Controller.put_flash(:warning, "User is not authenticated.") 
     |> Phoenix.Controller.redirect(to: TestApp.page_path(conn, :index)) 
     |> halt 
    end 
    end 

end 
+0

page_path nedir? Eğer bir fonksiyon ise, –

+0

'u "get"/", PageController,: index' –

+1

ile yönlendirici içinde üretebilirsiniz. Bu işe yarar mı? Phoenix.Controller.redirect (için: TestApp.Router.Helpers.page_path (conn,: index, "merhaba dünya")) –

cevap

7

Yönlendirici yardımcıları web.ex dosyası ile kontrolörler ve görünümde dahil edilir (Ben yorum olarak bu göndermek ama temsilcisi yok) Görebilir, hem controller hem de view işlevleri MyApp.Router.Helpers modülünü içe aktarır. Burada yardımcınız (_path ve url) işlevleri tanımlanmıştır.

Sen tam adını kullanabilirsiniz ya

:

Phoenix.Controller.redirect(to: TestAppRouter.Helpers.page_path(conn, :index)) 

Yoksa rota yardımcıları içe ve sonra bir boru hattı eklentisini kullanırsanız sadece Ancak page_path

import MyApp.Router.Helpers 
# or 
import MyApp.Router.Helpers, only: [page_path: 2] 

kullanabilirsiniz yönlendiriciniz, dairesel bir bağımlılığa neden olacak ve kodunuz derlenmeyecektir.

+0

Teşekkür ederim :) Sandesh Soni daha önce bunun hakkında bir yorum yaptı, ama yine de kabul ediyorum, aradığım şey buydu. Teşekkürler –

0

Denetleyici yardımcılarını getirdiniz mi?

def controller do 
    quote do 
     use Phoenix.Controller 
     ... 
     import MyApp.Router.Helpers 
    end 
    end 

    def view do 
    quote do 
     use Phoenix.View, root: "web/templates" 
     ... 
     import MyApp.Router.Helpers 
     ... 
    end 
    end 

size gibi:

use TestApp.Web, :controller 

+0

Denetleyicinin, fişleri başka bir denetleyiciye koyarken denetleyicileri kırdığını düşünüyorum. Her neyse bunu denedim ve işe yaramadı;) –

2

Bu işe yarar mı? Phoenix.Controller.redirect(to: TestApp.Router.Helpers.page_path(conn, :index))

Gaziler'in geçerli bir noktaya sahip olduğunu düşünüyorum. Ya içe ya da tam yol alabilirsiniz.

İlgili konular