不能使用插件使用宏长生不老药
Cant use plug in using macro elixir
所以 phoenix 有几个插件我想混入 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
所以我不确定为什么它是未定义的。这里有什么想法吗?
克里斯
错误消息可能会更好,但这似乎是由于宏卫生,它在将 action
发送到 plug
宏之前重命名它。我们可以使用 Kernel.var!/1
禁用变量 action
上的卫生。以下对我有用:
quote do
use XXX.Web, :controller
plug :xxx when var!(action) in [:xxx]
end
所以 phoenix 有几个插件我想混入 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
所以我不确定为什么它是未定义的。这里有什么想法吗?
克里斯
错误消息可能会更好,但这似乎是由于宏卫生,它在将 action
发送到 plug
宏之前重命名它。我们可以使用 Kernel.var!/1
禁用变量 action
上的卫生。以下对我有用:
quote do
use XXX.Web, :controller
plug :xxx when var!(action) in [:xxx]
end