DEV Community

loading...

สรุป Pattern ของ router helper function ที่ Phoenix นั้น generate ให้

Weerasak Chongnguluam
Software Developer/Love to code/Teaching to code
・1 min read

เวลาเรากำหนด router เพื่อจะใช้ map path กว่าถ้ามีการ request ตาม pattern ของ path ที่กำหนด จะให้ไปเรียก NameController.action ฟังก์ชันไหน ตัว Phoenix เองมันจะ generate Helper module ที่มี helper function ในการสร้าง URL endpoint ให้ด้วย ซึ่ง กฎในการสร้างมีคร่าวๆแบบนี้

1. มันจะใช้ชื่อ controller เป็น prefix เช่น

post "posts", PostController, :create
Enter fullscreen mode Exit fullscreen mode

มันก็จะสร้าง helper function ให้สองชื่อคือ

  • post_path
  • post_url

2. ถ้าเราไม่อยากได้ชื่อ controller เราสามารถกำหนดเองได้ด้วย option :as เช่น

post "posts", PostController, :create, as: "my_post"
Enter fullscreen mode Exit fullscreen mode

มันก็จะสร้าง helper function แบบนี้แทน

  • my_post_path
  • my_post_url

3. ถ้าเกิดมี resources ซ้อนกัน มันก็จะตั้งชื่อ helper โดย prefix ด้วยชื่อ controller ที่ซ้อนกันเช่น

resources "/users", UserController do
  resources "/posts", PostController
end
Enter fullscreen mode Exit fullscreen mode

มันก็จะสร้าง helper function แบบนี้

  • user_post_path
  • user_post_url

ถ้าเราเปลี่ยนไปใช้ option :as มันก็จะเอา as ของทั้งสองอันมาต่อกันแทน

4. ถ้ามี scope แล้ว scope ใส่ option :as ไปด้วย มันจะเอา option ของ scope มาเป็น prefix ด้วย เช่น

scope "/admin", HelloWeb.Admin, as: :admin do
  pipe_through :browser

  resources "/reviews", ReviewController
end
Enter fullscreen mode Exit fullscreen mode

มันก็จะสร้าง helper function แบบนี้

  • admin_review_path
  • admin_review_url

Ref: https://hexdocs.pm/phoenix/routing.html

ขอฝาก Buy Me a Coffee

สำหรับท่านใดที่อ่านแล้วชอบโพสต์ต่างๆของผมที่นี่ ต้องการสนับสนุนค่ากาแฟเล็กๆน้อยๆ สามารถสนับสนุนผมได้ผ่านทาง Buy Me a Coffee คลิ๊กที่รูปด้านล่างนี้ได้เลยครับ

Buy Me A Coffee

ส่วนท่านใดไม่สะดวกใช้บัตรเครดิต หรือ Paypal สามารถสนับสนุนผมได้ผ่านทาง PromptPay โดยดู QR Code ได้จากโพสต์ที่พินเอาไว้ได้ที่ Page DevDose ครับ https://web.facebook.com/devdoseth

ขอบคุณครับ 🙏

Discussion (0)