在 Phoenix 中干燥控制器

DRYing the controller in Phoenix

在我的控制器中我有 current_company 和 `current_user。用户必须将每个请求发送给当前公司。

所以我想,用户需要在 header 中发送它。

所以在一个请求中,我有令牌 (jwt) 和公司。现在在我的控制器中我有

 def action(conn, _) do
    apply(__MODULE__, action_name(conn),
      [conn, conn.params, conn.assigns.current_user])
  end

我正在提取 current_user 然后在我的函数调用中: def show(conn, %{"id" => id}, current_user) do 我使用它,现在我必须使用 company = conn.assigns.current_company 以便在每个函数中获取当前公司。

一切正常,我想看看是否有像我为 current_user 所做的那样的 DRY 解决方案,所以我不需要在我的控制器上重复它。

谢谢

您可以将任意数量的术语添加到作为最后一个参数传递给 apply 的列表中。 apply 将使用与该列表中一样多的参数调用相关函数。所以,你可以这样做:

apply(__MODULE__, action_name(conn),
  [conn, conn.params, conn.assigns.current_user, conn.assigns.current_company])

然后更改该模块中的所有操作函数以接受 4 个参数。第四个现在将是当前公司价值。