Elixir phoenix应该把全局控制器助手放在哪里

时间:2015-12-25 07:52:55

标签: elixir phoenix-framework

我几乎在所有控制器中都需要以下功能。在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

2 个答案:

答案 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]