代码之家  ›  专栏  ›  技术社区  ›  script

从控制器名称获取路径帮助程序

  •  2
  • script  · 技术社区  · 7 年前

    在Routes文档中。我读到我们可以得到这样的路径:

      iex> import HelloWeb.Router.Helpers
      iex> alias HelloWeb.Endpoint
      iex> user_path(Endpoint, :index)
           "/users"
    

    我们有什么办法可以 user_path 来自控制器 User 这样地

       user_path
    

    谢谢

    1 回复  |  直到 7 年前
        1
  •  1
  •   Dogbert    7 年前

    这不是公共API,将来可能会更改,但是 MyApp.Router.__routes__/0 可用于获取所有路由。从中,您可以按控制器过滤并获取指向该控制器的所有路由。

    我有一个标准 resources "/posts", PostController 在我的应用程序中。这里有一些 iex -S mix 该应用程序的输出:

    iex(1)> MyApp.Router.__routes__ |> hd
    %Phoenix.Router.Route{
      assigns: %{},
      helper: "page",
      host: nil,
      kind: :match,
      opts: :index,
      path: "/",
      pipe_through: [:browser],
      plug: MyApp.PageController,
      private: %{},
      verb: :get
    }
    iex(2)> for route <- MyApp.Router.__routes__,
    ...(2)>     route.plug == MyApp.PostController,
    ...(2)>   do: route.helper
    ["post", "post", "post", "post", "post", "post", nil, "post"]