Cheat Sheet速查表
跳转到主要内容

Phoenix:路由 速查表

本文根据 Devhints / Phoenix: Routing 翻译。代码示例及版本范围沿用原文。

显示路由

mix phx.routes        # 1.3+
mix phoenix.routes    # 1.2 and below

参见: Mix.Tasks.Phoenix.Routes(路由) (hexdocs.pm)

单个路由

get "/", PageController, :index

此外: put post patch options delete head

资源

resources "/users", UserController
resources "/users", UserController, only: [:index, :show]
resources "/users", UserController, except: [:delete]
resources "/users", UserController,
  as: :person    # helper name (person_path)
  name: :person  # ...?
  param: :id     # name of parameter for this resource

生成以下路由:

方法路径辅助工具
GET/usersuser_path(:index)
GET/users/newuser_path(:new)
GET/users/:iduser_path(:show, user)
GET/users/:id/edituser_path(:edit, user)
POST/usersuser_path(:create, user)
PATCH/PUT/users/:iduser_path(:update, user)
DELETE/users/:iduser_path(:delete, user)

参见: resources/4 (hexdocs.pm)

路径辅助工具

user_path(conn, :index)                 # → /users
user_path(conn, :show, 17)              # → /users/17
user_path(conn, :show, %User{id: 17})   # → /users/17
user_path(conn, :show, 17, admin: true) # → /users/17?admin=true
user_url(conn, :index) # → "http://localhost:4000/users"
MyApp.Router.Helpers.user_path(MyApp.Endpoint, :index)

参见: 辅助方法 (Helpers) (hexdocs.pm)

嵌套资源

resources "/users", UserController do
  resources "/posts", PostController
end
user_post_path(:index, 17)     # → /users/17/posts
user_post_path(:show, 17, 12)  # → /users/17/posts/12

参见: 作用域与资源 (hexdocs.pm)

带作用域的路由

scope "/admin" do
  pipe_through :browser
  resources "/reviews", MyApp.Admin.ReviewController
end
# reviews_path() -> /admin/reviews
scope "/admin", as: :admin do: ... end
# admin_reviews_path() -> /admin/reviews

参见: scope/2 (hexdocs.pm)