ทำความเข้าใจเรื่อง Form และ Request ในโลกของ Laravel
เวลาเราใช้งานเว็บไซต์แล้วต้องกรอกข้อมูล เช่น สมัครสมาชิกหรือติดต่อเรา สิ่งที่เราเห็นคือช่องให้กรอก แต่ในมุมของโปรแกรมเมอร์ สิ่งนั้นคือ Form (แบบฟอร์มสำหรับรับข้อมูลจากผู้ใช้) ซึ่งข้อมูลที่ถูกส่งออกมาจะถูกเรียกว่า Request (คำขอที่ส่งจากเบราว์เซอร์ไปยังเซิร์ฟเวอร์) เปรียบได้กับเวลาเราเขียนจดหมายใส่ซองแล้วยื่นให้พนักงานไปรษณีย์ ตัวจดหมายคือข้อมูล และพนักงานคือตัวกลางที่นำข้อมูลไปส่งยังปลายทาง
ใน Laravel (เฟรมเวิร์กยอดนิยมสำหรับภาษา PHP) การจัดการกับข้อมูลเหล่านี้เป็นเรื่องที่ง่ายและปลอดภัยมาก เพราะตัวเฟรมเวิร์กเตรียมเครื่องมือมาให้พร้อม เราไม่ต้องกังวลเรื่องการรับค่าด้วยวิธีเก่า ๆ ที่เสี่ยงต่อการถูกแฮก การเรียนรู้เรื่องนี้จึงเป็นบันไดขั้นแรกสำหรับคนที่อยากเป็นโปรแกรมเมอร์ เพราะทุกแอปพลิเคชันล้วนต้องมีการรับข้อมูลจากผู้ใช้เสมอ
สร้าง Form และส่งข้อมูลไปที่ Controller
ขั้นตอนแรกเราต้องสร้างหน้าเว็บที่มี Form ก่อน โดยใช้ภาษา HTML พื้นฐาน แต่ใน Laravel เรามักจะใช้ Blade Template (ระบบจัดการหน้าจอของ Laravel) เพื่อความสะดวก สิ่งสำคัญคือเราต้องระบุ method="POST" เพื่อบอกว่าเรากำลังจะส่งข้อมูลลับหรือข้อมูลจำนวนมาก และระบุ action เพื่อบอกว่าส่งไปที่ไหน
เมื่อกดปุ่ม Submit ข้อมูลจะวิ่งไปที่ Controller (ตัวควบคุมการทำงานของแอปฯ) ซึ่งเปรียบเสมือนสมองที่คอยตัดสินใจว่าได้รับข้อมูลมาแล้วต้องทำอย่างไรต่อ เราจะใช้คำสั่ง Request $request เพื่อดักจับข้อมูลทั้งหมดที่ถูกส่งเข้ามา
<!-- ไฟล์ resources/views/contact.blade.php -->
<form action="/submit-contact" method="POST">
@csrf <!-- ป้องกันการโจมตีแบบปลอมแปลงข้อมูล -->
<input type="text" name="name" placeholder="ชื่อของคุณ">
<button type="submit">ส่งข้อมูล</button>
</form>
ในโค้ดด้านบน @csrf คือสิ่งที่ขาดไม่ได้เลยใน Laravel มันคือ Token (กุญแจลับ) ที่ใช้ยืนยันว่าข้อมูลนี้ส่งมาจากหน้าเว็บของเราจริงๆ ไม่ใช่จากผู้ไม่หวังดี ถ้าลืมใส่ Laravel จะไม่อนุญาตให้ผ่านและขึ้น Error 419 ทันที
การ Validate ข้อมูลเพื่อความปลอดภัย
การ Validate (ตรวจสอบความถูกต้องของข้อมูล) คือด่านหน้าในการกรองข้อมูลขยะ เช่น ถ้าเราทำฟอร์มสมัครสมาชิก เราต้องเช็คว่าผู้ใช้กรอกอีเมลถูกต้องไหม หรือชื่อต้องไม่สั้นเกินไป ลองนึกภาพว่าถ้าเราไม่ตรวจสอบเลย ฐานข้อมูลของเราอาจจะเต็มไปด้วยข้อมูลที่ผิดพลาด จนแอปฯ ของเราพังในที่สุด
Laravel มีฟังก์ชันที่ชื่อว่า validate() ซึ่งใช้งานง่ายมาก โดยเราสามารถกำหนดกฎ (Rules) ได้เลยว่าต้องการให้ข้อมูลเป็นแบบไหน หากข้อมูลไม่ผ่านเงื่อนไข Laravel จะเด้งกลับไปหน้าเดิมพร้อมเก็บข้อความแจ้งเตือนไว้ให้เราแสดงผลต่อ
// ใน Controller ที่รับข้อมูล
public function store(Request $request) {
$validated = $request->validate([
'name' => 'required|max:255', // ต้องกรอก และห้ามเกิน 255 ตัวอักษร
'email' => 'required|email', // ต้องกรอก และต้องเป็นรูปแบบอีเมล
]);
// ถ้าผ่านการตรวจสอบ โค้ดส่วนนี้ถึงจะทำงานต่อ
return "ข้อมูลถูกต้อง!";
}
จุดที่มือใหม่มักพลาดคือการลืมกำหนดกฎให้รัดกุมพอ เช่น ลืมสั่ง required ทำให้ข้อมูลว่างเปล่าหลุดเข้าไปในระบบได้ วิธีแก้คือให้ลองคิดในแง่ร้ายที่สุดว่า "ถ้าผู้ใช้ไม่กรอกอะไรเลย ระบบเราจะพังไหม" แล้วเพิ่มกฎดักไว้เสมอ
การแจ้งเตือน Error ให้ผู้ใช้งานทราบ
เมื่อข้อมูลไม่ผ่านการตรวจสอบ เราต้องบอกผู้ใช้ว่าพวกเขาทำผิดตรงไหน การปล่อยให้หน้าจอค้างหรือขึ้น Error แปลกๆ เป็นประสบการณ์ที่แย่มาก ใน Laravel เราสามารถดึงข้อความ Error Message ที่เฟรมเวิร์กเตรียมไว้ให้มาแสดงบนหน้าจอได้อย่างง่ายดาย
- ตรวจสอบในหน้า Blade ว่ามีตัวแปร
$errorsหรือไม่ - ใช้คำสั่ง
@error('ชื่อฟิลด์')เพื่อแสดงข้อความเฉพาะจุด - แสดงข้อความนั้นออกมาให้ผู้ใช้เห็นชัดเจน
<!-- แสดงข้อความผิดพลาดใต้ช่องกรอก -->
<input type="text" name="name">
@error('name')
<div style="color: red;">{{ $message }}</div>
@enderror
ข้อควรระวัง คืออย่าลืมใช้ old('ชื่อฟิลด์') ในช่อง value ของ Input เพื่อให้ข้อมูลที่ผู้ใช้กรอกไว้ไม่หายไปเมื่อเกิด Error เพราะถ้าต้องกรอกใหม่หมด ผู้ใช้อาจจะรำคาญจนเลิกใช้งานแอปฯ ของเราไปเลย
สรุป: นำไปใช้จริงในโปรเจกต์แรกของคุณ
การสร้าง Form, รับค่า และ Validate ข้อมูล คือทักษะพื้นฐานที่โปรแกรมเมอร์ทุกคนต้องมี หากคุณกำลังทำโปรเจกต์ Portfolio แรก เช่น "ระบบสมุดบันทึกส่วนตัว" ให้ลองเริ่มจากการสร้างฟอร์มเพิ่มบันทึก แล้วบังคับให้ผู้ใช้ต้องกรอกหัวข้อบันทึกเสมอ หากไม่กรอกให้แสดงข้อความเตือนสีแดงใต้ช่องนั้น
การฝึกฝนจุดนี้จะทำให้คุณเข้าใจวงจรชีวิตของข้อมูล (Data Lifecycle) ตั้งแต่รับเข้ามา ตรวจสอบ จัดเก็บ จนถึงแสดงผล การเขียนโค้ดที่รัดกุมตั้งแต่วันนี้จะช่วยสร้างนิสัยการเป็น Clean Coder (นักเขียนโค้ดที่มีระเบียบและใส่ใจความปลอดภัย) ซึ่งเป็นคุณสมบัติที่บริษัทไอทีตามหามากที่สุดในตัวโปรแกรมเมอร์จูเนียร์ครับ