Kel*_*all 9 elixir phoenix-framework
我正在尝试编写一个Plug会对用户进行身份验证(实际检查会话).我无法获得重定向路由.我认为这是因为路由生成在激活此插件后发生.
无论如何我得到这样的错误: undefined function TestApp.page_path/2
在常规背景下,page_path/2显然存在并且有效.
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
Run Code Online (Sandbox Code Playgroud)
路由器助手包含在您的控制器中并通过web.ex文件查看:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,两者controller和view函数都导入MyApp.Router.Helpers模块.这是定义助手(_path和url)函数的地方.
您可以使用完全限定名称:
Phoenix.Controller.redirect(to: TestAppRouter.Helpers.page_path(conn, :index))
Run Code Online (Sandbox Code Playgroud)
或者您可以导入路线助手并使用 page_path
import MyApp.Router.Helpers
# or
import MyApp.Router.Helpers, only: [page_path: 2]
Run Code Online (Sandbox Code Playgroud)
但是,如果您在路由器中使用管道中的插件,则会导致循环依赖,并且您的代码将无法编译.
| 归档时间: |
|
| 查看次数: |
4291 次 |
| 最近记录: |