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 凤凰卫视:这是哪里';分配';来自哪里?_Elixir_Phoenix Framework - Fatal编程技术网

Elixir 凤凰卫视:这是哪里';分配';来自哪里?

Elixir 凤凰卫视:这是哪里';分配';来自哪里?,elixir,phoenix-framework,Elixir,Phoenix Framework,我在elixir phoenix自动创建的“app.html.eex”中发现了一个子句: <main role="main"> <%= render @view_module, @view_template, assigns %> </main> 但是这个关键字映射“assigns”从哪里来?assigns是一个模板上下文局部变量,通过在文档中声明 分配 “分配是指模板中可用的用户数据。但是,Phoenix专门处理分配下的一些键,它们是: :lay

我在elixir phoenix自动创建的“app.html.eex”中发现了一个子句:

<main role="main">
   <%= render @view_module, @view_template, assigns %>
</main>


但是这个关键字映射“assigns”从哪里来?

assigns
是一个模板上下文局部变量,通过在文档中声明

分配

“分配是指模板中可用的用户数据。但是,Phoenix专门处理分配下的一些键,它们是:

:layout-告诉Phoenix在给定布局中包装渲染结果。请参阅下一节。 以下分配是保留的,不能直接设置:

@视图模块-正在渲染的视图模块 @view_template-正在呈现的@view_模块的模板”

assigns是conn对象上的一个属性,用于添加数据以像选项一样传递

分配本身即将到来@conn.assigns, 在任何控制器中,您都可以通过 将此代码添加到控制器索引

defmodule MyAppWeb.PageController do
  use MyAppWeb, :controller

  def index(conn, _params) do
    conn = assign(conn, :thing, "this is not a taco")
    render conn, "index.html"
  end
end
然后在app.html.eex中添加这一行

<%= assigns.thing %>
我最常见的做法是将用户设置为“分配”,以便在这样的视图中具有访问权限 …插头/设置用户

 def init(_params) do
 end

 def call(conn, _params) do
    if conn.assigns[:user] do
      conn
    else
      user_id = get_session(conn, :user_id)

      cond do
        user = user_id && Repo.get(User, user_id) ->
          assign(conn, :user, user)
        true ->
          assign(conn, :user, nil)
      end
    end
 end
…查看/html

  <%= if @conn.assigns.user do %>
      Hello, <%= @conn.assigns.user.first_name %>!       
  <% else %>
  ... do something else
  <% end %>

你好
... 做点别的
要分配值,请使用“分配”

要获取使用“分配”的值


在控制器中,当执行
渲染conn,“index.html”,key::value
时,赋值将填充
key::value
对,以及调用
赋值(conn,:other_key,:other_value)
的任何位置。实际分配保存在
连接中
。您只需在模板中方便地访问它们。@JustinWood我知道,但是这个app.html.eex是由phoenix自己自动生成的,我想知道这个变量是从哪里来的。它必须在phoenix的源代码中的某个地方。您是否询问它在phoenix库代码中的何处生成
赋值
变量?因为这与您的问题不同。
assigns
只是指
conn.assigns
。除非我误解了这个问题?@JustinWood是的,我在问变量来自凤凰图书馆的哪里。谢谢。我的坏朋友,谢谢。你能在phoenix的源代码中给我们更多关于这个过程的细节吗?我有phoenix的源代码,在那里它被定义,链接。
  <%= if @conn.assigns.user do %>
      Hello, <%= @conn.assigns.user.first_name %>!       
  <% else %>
  ... do something else
  <% end %>