不能使用宏elix的插件

时间:2016-11-28 20:55:28

标签: elixir metaprogramming phoenix-framework

所以凤凰有一些插头我想把它放入base_controller.ex混合中,但即是。

plug :xxx when action in [:xxx]

然而,当我将其添加到__using__宏时,动作似乎是未定义的,即

defmacro __using__(opts) do
  quote do
    use XXX.Web, :controller
    plug :xxx when action in [:xxx]
  end
end

结果:

unknown variable action or cannot invoke local action/0 inside guard

似乎行动来自use XXX.Web, :controller所以我不确定为什么它是未定义的。这里有什么想法吗?

克里斯

1 个答案:

答案 0 :(得分:2)

错误消息可能更好,但这似乎是由于宏卫生,它在将action发送到plug之前重命名action。我们可以使用Kernel.var!/1禁用变量quote do use XXX.Web, :controller plug :xxx when var!(action) in [:xxx] end 的卫生。以下适用于我:

|| exit