【问题标题】:Elixir Pass parameter into Plug for previous plug parameterElixir 将参数传递到 Plug 以获取先前的 plug 参数
【发布时间】:2018-01-03 01:18:48
【问题描述】:

这可能不是 Breadcrumbable 问题,但我如何将之前插件中的参数传递到 breadcrumbable 中?例如,如果之前的插件set_merchant 将商家设置为conn.params.merchant,我如何将id 传递给breadcrumable?

   plug :set_merchant
   plug :add_breadcrumb, name: "Dashboard", url: "/dashboard/#{conn.params.merchant_id}"

.....

 defp set_merchant(conn, _opt) do
    case conn.params do
      %{"merchant_id" => merchant_id} ->
        case MyApp.find_merchant(merchant_id) do
          nil ->
            conn |> redirect(to: "/dashboard/#{merchant_id}") |> halt
          merchant ->
            assign(conn, :merchant, merchant)
        end
      _ ->
        conn |> redirect(to: "/") |> halt
    end
  end

conn.params.merchant_id 是我想从第一个插件 set_merchant 传递参数的地方

【问题讨论】:

    标签: elixir plug


    【解决方案1】:

    您可以像使用 Plug.Conn.assign/3 函数一样传递任意数量的参数。

    对您来说最简单的解决方案是在您的 case 中执行类似的操作:

    case MyApp.find_merchant(merchant_id) do
      nil ->
        conn 
        |> redirect(to: "/dashboard/#{merchant_id}") 
        |> halt()
      merchant ->
        conn
        |> assign(:merchant, merchant)
        |> assign(:merchant_id, merchant_id) # this is what you asked for
    end
    

    那么您将不会通过添加此urlmerchant_id 来调用您的plug,因为conn 已经拥有它,因为set_merchant 会提供给您。

    另外,另一种选择:

    如果您不想在那里拥有merchant_id,您可以通过以下方式从merchant 获取它:

    merchant_id = conn.assigns.merchant.id
    

    您必须区分 paramsassigns。我不知道你是怎么得到merchant的,但要快速记住这一点:

    • params 来自外部,例如POST 请求、查询字符串等。
    • assigns 由您或其他任何修改 Plug.Connassign/3 函数的人设置

    【讨论】:

    • 问题是在plug :add_breadcrumb 上我无法访问conn。我可以在set_merchant函数中赋值就好了,但是接下来我们需要将商家的id传递到plug :add_breadrecrumburl参数中
    【解决方案2】:

    您可以像这样直接从set_merchant 插件调用add_breadcrumb plug

    assign(conn, :merchant, merchant)
    |> Breadcrumble.Plugs.add_breadcrumb(name: "Dashboard", url: "/dashboard/#{merchant_id}")
    

    【讨论】:

    • 这就是我最终要做的。这是最简单的方法,虽然我认为我最初的问题没有得到回答,但同时,我认为不可能做我想做的事情。
    猜你喜欢
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    • 2016-01-22
    相关资源
    最近更新 更多