Routing 101: กำหนดเส้นทางให้เว็บของคุณ

1. 🎯 ชื่อตอน (Title): ตอนที่ 15: Routing 101 วาดแผนผังจราจรให้แอปพลิเคชันด้วย Laravel Router
2. 📖 เปิดฉาก (The Hook):
มาครับน้องๆ วันนี้เราจะมาสวมบทบาทเป็น “วิศวกรจราจร” กัน! ลองจินตนาการดูว่า การสร้างเว็บแอปพลิเคชันก็เหมือนกับการสร้างเมืองหลวงขนาดใหญ่ ต่อให้น้องๆ มีตึกสวยๆ (Views) หรือมีฐานข้อมูลระดับองค์กร (Database) อยู่ในเมือง แต่ถ้าไม่มี “ถนนและป้ายบอกทาง” ผู้ใช้งานก็ไม่รู้จะเดินทางไปหาสิ่งเหล่านั้นได้อย่างไรจริงไหมครับ?
ย้อนกลับไปยุคทำเว็บด้วย PHP สมัยก่อน เราต้องมานั่งเขียนโค้ดดักจับ URL แบบ if ($_SERVER['REQUEST_URI'] == '/about') ซึ่งถ้าเว็บมีสักร้อยหน้า ไฟล์นั้นคงยาวเป็นหางว่าวและอ่านยากสุดๆ (Pain Point ขั้นสุด!)
แต่ในโลกของ Laravel เรามี “Router” ซึ่งเปรียบเสมือนจราจรสุดสมาร์ท ที่คอยยืนอยู่หน้าประตูเมือง คอยรับ Request จากผู้ใช้ และชี้ทางให้ไปหา Controller หรือ View ที่ถูกต้องได้อย่างแม่นยำ วันนี้พี่จะพาไปปูพื้นฐาน Routing 101 กันแบบเจาะลึก พร้อมไขข้อข้องใจว่าใน Laravel 11 นั้น ไฟล์ที่เราคุ้นเคยมันหายไปไหน!
3. 🧠 แก่นวิชา (Core Concepts):
ระบบ Routing ของ Laravel ถูกออกแบบมาให้เขียนง่าย อ่านคล่องเหมือนภาษาอังกฤษ (Expressive syntax) โดยมีแก่นสำคัญที่เราต้องรู้ดังนี้ครับ:
🛣️ สองเส้นทางหลัก (web.php vs api.php):
routes/web.php: นี่คือถนนสายหลักสำหรับ “ผู้ใช้งานที่เป็นมนุษย์” เส้นทางนี้จะถูกคุ้มครองด้วยเกราะป้องกัน (web middleware group) ที่มีทั้งระบบ Session, การจดจำ Cookie, และการป้องกันการโจมตีแบบ CSRFroutes/api.php: นี่คือทางด่วนพิเศษสำหรับ “แอปพลิเคชันหรือมือถือ” (Stateless API) มันไม่มี Session และไม่มีเกราะ CSRF แต่จะใช้ Token ในการยืนยันตัวตนแทน แถมมันยังใจดีเติมคำว่า/apiนำหน้า URL ให้เราอัตโนมัติด้วยนะ- 🚨 เซอร์ไพรส์ใน Laravel 11 (Thinner Skeleton): ในเวอร์ชัน 11 ไฟล์
api.phpจะ ไม่ถูกสร้างมาให้ตั้งแต่แรก! เพราะทีมพัฒนาถือคติว่า “ถ้าไม่ได้ทำ API ก็ไม่ต้องมีให้รกตา” (Opt-in) ถ้าน้องๆ อยากใช้งาน ต้องร่ายมนต์คำสั่งphp artisan install:apiก่อน ระบบถึงจะเสกไฟล์นี้ขึ้นมาให้ครับ
🚦 HTTP Verbs (ป้ายสั่งการ): Router รองรับการทำงานตามมาตรฐาน RESTful ทุกประการ ไม่ว่าจะเป็น
Route::get()(ขอดูข้อมูล),Route::post()(ส่งข้อมูลมาบันทึก),Route::put()/patch()(ขอแก้ไข), และRoute::delete()(ขอลบ)🎒 Route Parameters (รับของฝากกลางทาง): บางครั้ง URL ไม่ได้ตายตัวเสมอไป เช่น ถ้าเราอยากดูโปรไฟล์ของ User ID ที่ 5 URL ก็จะเป็น
/users/5เราสามารถใช้เครื่องหมายปีกกา{id}เพื่อจับเอาเลข 5 ใน URL โยนเข้าไปเป็นตัวแปร (Parameter) ในโค้ดของเราได้ทันที🏷️ Named Routes (ตั้งชื่อเล่นให้ถนน): อันนี้คือไม้ตายของ Senior Dev! การระบุ URL ตรงๆ ในโค้ด (Hardcoding) เป็นเรื่องอันตราย เพราะถ้าวันนึงบอสสั่งเปลี่ยน URL จาก
/about-usเป็น/our-storyน้องต้องตามแก้ทั้งโปรเจกต์ แต่ถ้าเรา “ตั้งชื่อเล่น (Named Route)” ให้มัน เราก็อ้างอิงผ่านชื่อเล่นแทน ไม่ว่า URL จริงจะเปลี่ยนไปกี่รอบ โค้ดส่วนอื่นก็ไม่ต้องแก้เลยครับ!

4. 💻 ร่ายมนต์โค้ด (Show me the Code):
เรามาดูเวทมนตร์ในการสร้างเส้นทางกันครับ เปิดไฟล์ routes/web.php แล้วลุยกันเลย!
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
// 1. Basic Route: เมื่อมีคนเข้า URL '/greeting' แบบ GET ให้คืนค่าข้อความกลับไป
Route::get('/greeting', function () {
return 'Hello World! ยินดีต้อนรับสู่เมือง Laravel';
});
// 2. Route Parameters: รับค่า ID จาก URL เช่น /users/99
// ค่า '99' จะถูกจับยัดใส่ตัวแปร $id อัตโนมัติ (Dynamic Segment)
Route::get('/users/{id}', function (string $id) {
return "คุณกำลังดูโปรไฟล์ของ User หมายเลข: " . $id;
});
// 3. Optional Parameters: ใส่เครื่องหมาย ? หมายถึง "ไม่มีค่านี้ส่งมาก็ไม่เป็นไร"
// อย่าลืมกำหนดค่าเริ่มต้น (Default value) ให้ตัวแปรด้วยล่ะ!
Route::get('/posts/{category?}', function (string $category = 'all') {
return "กำลังแสดงบทความในหมวดหมู่: " . $category;
});
// 4. Named Routes: ตั้งชื่อเล่นให้เส้นทาง โดยส่งไปให้ Controller ทำงาน
Route::get('/dashboard/admin', [UserController::class, 'dashboard'])
->name('admin.dashboard'); // ตั้งชื่อเล่นว่า 'admin.dashboard'
การนำ Named Route ไปใช้จริง (ในไฟล์ View .blade.php หรือ Controller):
<!-- แทนที่จะเขียน href="/dashboard/admin" ตรงๆ เราใช้ helper function route() แทน -->
<a href="{{ route('admin.dashboard') }}">เข้าสู่แผงควบคุม</a>5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips):
- คำสั่งตรวจสอบเส้นทาง: วันนึงถ้าน้องรับช่วงต่อโปรเจกต์จากคนอื่น แล้วงงว่า “เว็บนี้มันมี URL อะไรให้เข้าบ้างวะ?” ไม่ต้องไปไล่เปิดไฟล์หาครับ พิมพ์
php artisan route:listลงใน Terminal ระบบจะสรุปรายชื่อ Route, Methods และ Middleware ทั้งหมดมาให้ดูเป็นตารางสวยงาม - กฎการจัดลำดับ (Order Matters): การวางลำดับ Route สำคัญมาก! กฎคือ “ต้องเอา Route ที่เฉพาะเจาะจง (Specific) ไว้บนสุด และเอา Route ที่มี Parameter (Dynamic) ไว้ล่างสุด” ไม่งั้น Route ที่มี Parameter จะไปดักจับ Request ของเพื่อนจนพังหมดครับ
- เพิ่มสปีดทะลุหลอดด้วย Route Caching: เมื่อแอปของน้องๆ พร้อมขึ้น Production (เซิร์ฟเวอร์จริง) การให้ Laravel มานั่งอ่านและประมวลผลไฟล์ routes ทุกๆ Request จะทำให้เว็บช้า พี่แนะนำให้รันคำสั่ง
php artisan route:cacheมันจะทำการมัดรวม Route ทั้งหมดเป็นไฟล์เดียว ช่วยลด Overhead และทำให้เว็บเร็วขึ้นอย่างเห็นได้ชัด (ข้อควรระวัง: ห้ามใช้คำสั่งนี้ในตอนกำลังพัฒนาบนเครื่อง Local เด็ดขาด ไม่งั้นแก้โค้ดแล้วจะไม่ยอมเปลี่ยน)
6. 🏁 บทสรุป (To be continued…):
เป็นอย่างไรกันบ้างครับกับพื้นฐาน Routing 101 สรุปสั้นๆ คือ Router เป็นด่านแรกสุดของการประมวลผล การออกแบบ URL และการจัดกลุ่ม Route ที่ดีจะช่วยสะท้อนให้เห็นถึง Architecture ที่สะอาดตาของโปรเจกต์เราได้เป็นอย่างดี
แต่สังเกตไหมครับว่า ในตัวอย่างที่ผ่านมา เรายังเขียนโค้ด Business Logic ปนเอาไว้ใน Closure (ฟังก์ชันไม่มีชื่อ) ของไฟล์ routes อยู่เลย ซึ่งมันไม่ใช่วิถีของสถาปนิกที่ดี! ในตอนหน้า พี่จะพาไปเจาะลึกอาวุธคู่กายของ Router นั่นก็คือ “Controllers” เราจะไปดูวิธีการย้ายตรรกะการทำงานที่ซับซ้อนไปไว้ในที่ที่มันควรอยู่… เตรียมกาแฟให้พร้อม แล้วพบกันครับ!
ต้องการที่ปรึกษาและพัฒนาระบบ Automation ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p