在 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 个参数。第四个现在将是当前公司价值。
在我的控制器中我有 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 个参数。第四个现在将是当前公司价值。