我几乎在所有控制器中都需要以下功能。在Elixir中是否有类似ApplicationController的模块?
我们应该把它们放在哪里?
def redirect_if_unauthorized(conn = %Plug.Conn{assigns: %{authorized: false}}, opts) do
conn
|> put_flash(:error, "You can't access that page!")
|> redirect(to: "/")
|> halt
end
def redirect_if_unauthorized(conn = %Plug.Conn{assigns: %{authorized: true}}, opts), do: conn
答案 0 :(得分:7)
作为一种方法,您可以创建一个单独的模块并将其导入web.ex
函数的controller
文件中。
像这样:
defmodule MyApp.Web do
# Some code...
def controller do
quote do
# Some code ...
import MyApp.CustomFunctions
# Some code ...
do
end
# Some code...
end
答案 1 :(得分:3)
通常这些会在插件内部添加到您的路由管道中。
此示例用于编程Phoenix:
Rumbl.Auth
模块,其中包含authenticate_user
函数import Rumbl.Auth, only: [authenticate_user: 2]
pipe_through [:browser, :authenticate_user]
。