本文根据 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 | /users | user_path(:index) |
| GET | /users/new | user_path(:new) |
| GET | /users/:id | user_path(:show, user) |
| GET | /users/:id/edit | user_path(:edit, user) |
| POST | /users | user_path(:create, user) |
| PATCH/PUT | /users/:id | user_path(:update, user) |
| DELETE | /users/:id | user_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)