Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Elixir 将数据注入Phoenix';s动作参数_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 将数据注入Phoenix';s动作参数

Elixir 将数据注入Phoenix';s动作参数,elixir,phoenix-framework,Elixir,Phoenix Framework,我正在尝试编写一些插件,以减少项目中不需要的代码量,我希望获取一些会话数据,并将其放入控制器操作中的_参数中。但是我不知道怎么做。我遇到了functon assign/3,但据我所知,它分配了要在模板中使用的数据 def logged(conn, _opts) do case get_session(conn, :login) do nil -> conn |> Phoenix.Controller.put_flash(:error, "Musis

我正在尝试编写一些插件,以减少项目中不需要的代码量,我希望获取一些会话数据,并将其放入控制器操作中的_参数中。但是我不知道怎么做。我遇到了functon assign/3,但据我所知,它分配了要在模板中使用的数据

def logged(conn, _opts) do
    case get_session(conn, :login) do
      nil -> conn
        |> Phoenix.Controller.put_flash(:error, "Musisz być zalogowany")
        |> Phoenix.Controller.redirect( to: "/")
        |> Plug.Conn.halt
      login -> #here
    end
  end
我希望能够做到:

def someaction(conn, %{"login" => login}) do
  #do something with login
end

有两个地方可以在
Plug.Conn
struct上存储键值对。和。通常,应用程序应使用
assigns
,库应使用
private

此存储用于库和框架,以避免写入用户存储(分配字段)。建议库/框架使用库名称作为键的前缀

使用
assign
获得您的用户:

def logged(conn, _opts) do
    case get_session(conn, :login) do
      nil -> conn
        ...
      login -> Plug.Conn.assign(conn, :current_user, login)
    end
  end

def someaction(conn, _params) do
  # do something with conn.assigns.current_user
end

如果在控制器的函数中经常使用<代码> CurrutsUpUs/Cuff>函数,那么考虑在控制器中重写<代码>动作/ 2 < /代码>函数。如中的“为自定义参数重写

action/2
”中所述

为了完整性。您可以使用as
conn更新参数(在用户身份验证的情况下我不会更新)。params
是一个映射:

update_in(conn.params, fn (params) -> Map.put(params, :something, "value") end)
update_in(conn.params, fn (params) -> Map.put(params, :something, "value") end)