在 Phoenix Framework 上放置辅助模块的位置
Where to put helper module on Phoenix Framework
我想添加一个辅助模块来使用
执行获取请求
http://hexdocs.pm/httpoison/HTTPoison.Base.html
但是当我把 defmodule
放在
/lib/Shopper/CallApi.ex
和 use
在
/web.ex
def controller do
quote do
use Phoenix.Controller
alias Shopper.Repo
import Ecto.Model
import Ecto.Query, only: [from: 1, from: 2]
import Shopper.Router.Helpers
use Shopper.CallApi
end
结束
编译器失败
== Compilation error on file web/controllers/page_controller.ex ==
** (UndefinedFunctionError) undefined function: Shopper.CallApi.__using__/1
Shopper.CallApi.__using__([])
web/controllers/page_controller.ex:2: (module)
所以...在哪里定义 CallApi.ex 以及我应该在哪里声明它?
当您调用 use Shopper.CallApi
时,会调用 __using__/1
宏 - 这是元编程特有的。如果您想在模块中使用 Shopper.CallApi
中定义的函数,请改用 alias Shopper.CallApi
。
alias
、require
和 import
之间的差异记录在 Alias, Require and Import and using
is documented in Domain Specific Languages 中。
顺便说一句,通常在 elixir 项目中,文件被命名为 snake_case - call_api.ex
而不是 CallApi.ex
.
我想添加一个辅助模块来使用
执行获取请求http://hexdocs.pm/httpoison/HTTPoison.Base.html
但是当我把 defmodule
放在
/lib/Shopper/CallApi.ex
和 use
在
/web.ex
def controller do
quote do
use Phoenix.Controller
alias Shopper.Repo
import Ecto.Model
import Ecto.Query, only: [from: 1, from: 2]
import Shopper.Router.Helpers
use Shopper.CallApi
end
结束
编译器失败
== Compilation error on file web/controllers/page_controller.ex ==
** (UndefinedFunctionError) undefined function: Shopper.CallApi.__using__/1
Shopper.CallApi.__using__([])
web/controllers/page_controller.ex:2: (module)
所以...在哪里定义 CallApi.ex 以及我应该在哪里声明它?
当您调用 use Shopper.CallApi
时,会调用 __using__/1
宏 - 这是元编程特有的。如果您想在模块中使用 Shopper.CallApi
中定义的函数,请改用 alias Shopper.CallApi
。
alias
、require
和 import
之间的差异记录在 Alias, Require and Import and using
is documented in Domain Specific Languages 中。
顺便说一句,通常在 elixir 项目中,文件被命名为 snake_case - call_api.ex
而不是 CallApi.ex
.