从凤凰路由器动态获取所有实时路由

问题描述

我想在 Phoenix 中创建一个页面,其中包含指向 router.ex 文件中声明的所有“实时”路由的链接。 例如:

PHPSESSID

我想创建一个包含路线的列表,以便获得路径链接。 有没有办法从凤凰路由器动态获取所有现有的实时路由,而无需再次全部写入?

打印出类似 ... live "/",PageLive live "/light",LightLive live "/license",LicenseLive live "/sales-dashboard",SalesDashboardLive live "/search",SearchLive live "/autocomplete",AutocompleteLive live "/filter",FilterLive live "/servers",ServersLive .... 内容

解决方法

您可以使用 YourProjectWeb.Router.__routes__() 获取路线列表。请注意,它是一个私有 API,可能会随着新的 phoenix 版本而改变。

然后您可以根据 :plug 中的 %Phoenix.Router.Route 字段进行过滤。对于实时视图,这必须是 Phoenix.LiveView.Plug

iex(18)> YourProjectWeb.Router.__routes__()
[
  %Phoenix.Router.Route{
    assigns: %{},helper: "login",host: nil,kind: :match,line: 2,metadata: %{log: :debug},path: "/login",pipe_through: [:browser],plug: YourProjectWeb.LoginController,plug_opts: :index,private: %{},trailing_slash?: false,verb: :get
  },%Phoenix.Router.Route{
    assigns: %{},helper: "settings",line: 39,metadata: %{
      log: :debug,phoenix_live_view: {YourProjectWeb.SettingsLive,:index}
    },path: "/settings",pipe_through: [:browser,:ensure_authenticated],plug: Phoenix.LiveView.Plug,private: %{
      phoenix_live_view: {YourProjectWeb.SettingsLive,[action: :index,router: YourProjectWeb.Router]}
    },verb: :get
  }
]