Laravel – EP5 การกำหนด Routing

สอน Laravel

ใน Laravel เวลาที่เราเข้าลิงค์ใดๆ ก็ตาม เราจะมี Routing ที่ช่วยกำหนดเส้นทางการเข้าถึงว่าจะให้ไปทำอะไรที่ไหน นะครับ เราเรียกสิ่งนี้ว่า Routing เช่น ผู้ใช้ต้องการเข้าลิงค์ itoffside.com/theboy/1234 เราก็เขียนกำหนดเส้นทางให้ไปทางไหน เป็นต้น โดยทั่วไปแล้วการร้องขอ URL จากผู้ใช้มาแล้ว เราจะกำหนดเส้นทางและส่งไปให้กับ Controller ทำงานต่อแทน โดยบทความนี้จะกล่าวถึงกำหนดเส้นทางโดยให้ Controller ทำงานต่อแทนเป็นหลัก

Basic Routing

    เส้นทางการร้องขอทั้งหมดของระบบ Laravel จะถูกผ่านมาที่ routes/web.php (สำหรับเว็บ ตัวอย่างบทความนี้ใช้ไฟล์นี้ก่อน) หรือ routes/api.php (สำหรับ APi)

ให้เราเปิดไฟล์ routes/web.php  เราจะเห็น code เขียน

หมายความว่าเมื่อ request มาหน้าแรก แล้วให้ แสดง view welcome (อยู่ที่ resources/views/welcome.blade.php) จะเห็นได้ว่าเราไม่จำเป็นต้องโยนให้ Controller ก็สามารถทำงานได้เหมือนกัน แต่ที่เราให้ routing โยนให้ Controller ทำงานเพราะ Code จะได้เป็นระเบียบเรียบร้อย

ส่วนหากเราต้องการให้ Routing แล้วโยนให้ Controller ทำงานต่อนั้น ทำได้โดยแบบด้านล่างนี้ครับ

ความหมายคือเมื่อ request มาหน้าแรก แล้วสั่งให้ Controller ชื่อ HomeController และ Function index() ทำงานครับ เราลองมาสร้าง Controller กันครับ สามารถสร้างได้ 2 แบบคือ

  1. สร้างเอง โดยเข้าไปสร้างไฟล์ที่ app/Http/Controllers/HomeController.php
  2. ใช้ Command line Artisan สร้าง โดยให้เราเปิด Command line ในโปรเจ็คของเราก่อนหากใครทำไม่เป็นให้ดูบทความที่ 2 https://www.itoffside.com/laravel-ep2-install/ เมื่อเราเปิด command line แล้วให้พิมพ์คำสั่ง

    แล้ว artisan จะสร้าง controller ไว้ที่ app/Http/Controllers ให้เราเลยครับ ง่ายๆไหมครับ
  3. สร้าง function index ใน HomeController

เพียงเท่านี้ครับสำหรับการให้ Routing โยนให้ Controller ทำงานต่อแล้ว Controller ก็จะทำงานตามที่เราเขียน code ไว้

Route Parameters

    ในบางครั้งในเว็บ เราจำเป็นต้องมีค่า parameter ส่งไปทาง url เช่น itoffside.com/product/1234 จะเห็นว่า parameter 1234 นั้นเป็นค่าที่อาจจะเป็นค่าอื่นได้เช่นกันเช่น 5678 สำหรับ Routing laravel ก็มีวิธีการส่งค่าเหมือนกัน เรามาดู code กันว่าเขียนแบบไหน

ใน routes/web.php เขียนต่อจากอันเดิมเป็น

จะเห็นว่าเรามีการส่ง parameter {id} ไปด้วย (ชื่ออาจจะเป็นอย่างอื่นก็ได้ไม่จำเป็นต้องเป็น id เอาตามความเข้าใจของเรา) โดย parameter ต้องคลุมด้วย {} เสมอ

แล้วเราก็ไปเขียน code ใน HomeController เพิ่มในบรรทัดที่ 14-17

จาก code หมายถึงเรา สร้าง function product แล้วรับ parameter ที่ routing ส่งมาให้เรา ลองมาดูผลลัพท์ของ code กัน
ปล. อย่าลืม เปิด command แล้ว run คำสั่ง  php artisan serve ด้วยนะครับ

จะเห็นว่าผม request url เป็น product/1234 แล้วใน controller ผมสั่งให้ แสดง parameter 1234 ก็เลยได้ผลลัพท์ตามรูปภาพด้านบน

Routing Methods

    Routing methods คือหนึ่งอย่างที่ Laravel มีความพิเศษ เพราะว่าเราสามารถกำหนด HTTP Verb ได้เช่นเราอยากให้ routing นี้เป็น GET, POST, PUT, DELETE แบบง่ายๆเลย ลองดูตัวอย่าง

ผมจะยกตัวอย่างการใช้งาน HTTP Verb ประเภท POST

ในหน้า view ผมเขียน form จะเป็นแบบนี้

โปรดระวังหากเรา request ไม่ตรง verb จะเกิด error ทันที

Routing Groups prefix

    เป็นการจัดกลุ่ม routing โดยอ้างอิงชื่อ prefix ที่เราไม่จำเป็นต้องมาสร้างชื่อซ้ำๆเดิม ยกตัวอย่างเช่นคุณมี Routing 

จะเห็นว่าชื่อ product เรียงกัน ซึ่งเราสามารถจัดเป็นกลุ่มของ prefix “product” ได้โดยเขียนคำสั่งนี้ไป

สรุป

    Routing ใน Laravel นั้นจำเป็นอย่างมาก เพราะ ทุก Request เราต้องควบคุมผ่าน Routing นี้โดย Routing ของ laravel ไม่ได้ Generate อัตโนมัติเหมือน Codeigniter ที่มีรูปแบบ project/controller/methods/{id} ที่เขียนง่าย เริ่มต้นได้ง่าย แต่สำหรับ laravel เราต้องมากำหนด routing เอง ซึ่งตอนแรกอาจจะคิดว่าลำบาก ยาก แต่หากได้ใช้ไปสักพักแล้วมันเป็นอะไรที่ง่ายและสะดวก ดังนั้นเราจึงจำเป็นต้องเรียนรู้และเข้าใจ เพราะหากเราเข้าใจแล้ว เราจะสามรถเขียนเว็บ/ระบบ ได้ดังใจเราต้องการ

You May Also Like

About the Author: Onmobile

โปรแกรมเมอร์
Subscribe
Notify of
guest

This site uses Akismet to reduce spam. Learn how your comment data is processed.

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
Notee
Notee
4 years ago

Target class [HomeController] does not exist.

ต้องแก้ยังไงครับ