在Phoenix Framework上放置辅助模块的位置

时间:2015-09-21 10:00:03

标签: elixir phoenix-framework

我想添加一个帮助程序模块来使用

执行get请求

http://hexdocs.pm/httpoison/HTTPoison.Base.html

但是当我将defmodule放入

  

/lib/Shopper/CallApi.ex

和<{p>中的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以及我应该在哪里声明它?

1 个答案:

答案 0 :(得分:5)

当您致电use Shopper.CallApi时,会调用__using__/1宏 - 这是特定于元编程的。如果您想使用模块中Shopper.CallApi中定义的函数,请改用alias Shopper.CallApi

Alias, Require and Import中记录了aliasrequireimport之间的差异,Domain Specific Languages中记录了using

另外,通常在elixir项目中,文件以snake_case命名 - call_api.ex而不是CallApi.ex