【问题标题】:Elixir phoenix where should one put global controller helpersElixir phoenix 应该将全局控制器助手放在哪里
【发布时间】:2016-03-31 09:16:33
【问题描述】:

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

【问题讨论】:

    标签: elixir phoenix-framework


    【解决方案1】:

    通常这些会在 Plug 内,添加到您的路由管道中。

    此示例用于凤凰编程:

    • 他们定义了一个带有authenticate_user 函数的Rumbl.Auth 模块
    • 他们通过import Rumbl.Auth, only: [authenticate_user: 2]将插件包含在他们的路由器中
    • 然后他们通过它传递请求 - pipe_through [:browser, :authenticate_user]

    【讨论】:

      【解决方案2】:

      作为一种方法,您可以创建一个单独的模块并将其导入到controller 函数的web.ex 文件中。

      像这样:

      defmodule MyApp.Web do
      
      # Some code...
      
        def controller do
          quote do
      
            # Some code ...
      
            import MyApp.CustomFunctions
      
            # Some code ...
      
          do
        end
      
      # Some code...
      
      end
      

      【讨论】:

      • 模块应该放在哪里有约定吗?
      • @Chris 我不确定,我想你可以把它放在你认为应该放的任何地方。可能在web 文件夹中,所以它会被重新加载。
      • 好的,谢谢。我现在在控制器/助手和视图/助手中放了一些代码,看起来不错!
      猜你喜欢
      • 1970-01-01
      • 2016-07-23
      • 1970-01-01
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-17
      相关资源
      最近更新 更多