从凤凰路由器动态获取所有实时路由
Get all live routes dynamically from phoenix router
我想在 Phoenix 中创建一个页面,它会链接到 router.ex 文件中声明的所有 'live' 路由。
例如:
...
live "/", PageLive
live "/light", LightLive
live "/license", LicenseLive
live "/sales-dashboard", SalesDashboardLive
live "/search", SearchLive
live "/autocomplete", AutocompleteLive
live "/filter", FilterLive
live "/servers", ServersLive
....
我想创建一个包含路线的列表,以便获得路径链接。
有没有办法从 phoenix router 动态获取所有现有的实时路由,而无需重新写入所有路由?
输出类似 mix phx.routes
的内容。
您可以使用 YourProjectWeb.Router.__routes__()
获取路线列表。请注意,它是私有的 API 并且可能会随着新的 phoenix 版本而改变。
然后您可以根据 %Phoenix.Router.Route
中的 :plug
字段进行过滤。对于实时视图,这必须是 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",
host: nil,
kind: :match,
line: 39,
metadata: %{
log: :debug,
phoenix_live_view: {YourProjectWeb.SettingsLive, :index}
},
path: "/settings",
pipe_through: [:browser, :ensure_authenticated],
plug: Phoenix.LiveView.Plug,
plug_opts: :index,
private: %{
phoenix_live_view: {YourProjectWeb.SettingsLive,
[action: :index, router: YourProjectWeb.Router]}
},
trailing_slash?: false,
verb: :get
}
]
我想在 Phoenix 中创建一个页面,它会链接到 router.ex 文件中声明的所有 'live' 路由。 例如:
...
live "/", PageLive
live "/light", LightLive
live "/license", LicenseLive
live "/sales-dashboard", SalesDashboardLive
live "/search", SearchLive
live "/autocomplete", AutocompleteLive
live "/filter", FilterLive
live "/servers", ServersLive
....
我想创建一个包含路线的列表,以便获得路径链接。 有没有办法从 phoenix router 动态获取所有现有的实时路由,而无需重新写入所有路由?
输出类似 mix phx.routes
的内容。
您可以使用 YourProjectWeb.Router.__routes__()
获取路线列表。请注意,它是私有的 API 并且可能会随着新的 phoenix 版本而改变。
然后您可以根据 %Phoenix.Router.Route
中的 :plug
字段进行过滤。对于实时视图,这必须是 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",
host: nil,
kind: :match,
line: 39,
metadata: %{
log: :debug,
phoenix_live_view: {YourProjectWeb.SettingsLive, :index}
},
path: "/settings",
pipe_through: [:browser, :ensure_authenticated],
plug: Phoenix.LiveView.Plug,
plug_opts: :index,
private: %{
phoenix_live_view: {YourProjectWeb.SettingsLive,
[action: :index, router: YourProjectWeb.Router]}
},
trailing_slash?: false,
verb: :get
}
]