ผังไดอะแกรมที่ผมวาดขึ้นมานี่ ค่อนข้างสำคัญนะครับ มันเป็นตัวอธิบายว่า Laravel นั้นลำดับการทำงานของมันเป็นอย่างไร และ MVC ของมัน เราต้องเก็บไฟล์แต่ละส่วนไว้ที่ตรงไหนบ้าง
เริ่มจากมีใครคนหนึ่งพิมพ์ URL เข้ามาในเบราเซอร์ จากนั้นเบราเซอร์จะส่ง request ไปหา Laravel ทุกๆ request จะถูกส่งไปยังไฟล์ C:\xampp\htdocs\blog\public\index.php
ไฟล์ index.php จะทำหน้าที่โหลดไลบรารี่ ค่าคอนฟิกต่างๆ ที่จำเป็นต้องใช้ขึ้นมา ไฟล์ index.php นี้เราจะไม่เข้าไปยุ่งอะไรกับมัน จากนั้น index มันจะส่ง URL ไปถามที่ไฟล์ C:\xampp\htdocs\blog\app\Http\routes.php ว่าหน้า question ที่เขาต้องการนั้นมีอยู่หรือเปล่า
routes.php เป็นไฟล์ที่เปรียบเสมือนหน้าด่านสำคัญ เราจะอนุญาติให้เรียกใช้เพจนั้นๆได้หรือไม่ได้ ก็อยู่ตรงไฟล์ routes.php นี่แหละ
ทีนี้ถ้าหากดูจากไดอาแกรมที่ผมวาดไว้ เส้นที่วิ่งจาก routes.php ไปยัง QuestionController.php ผมทำเส้นประ นั่นหมายความว่า เราสามารถ return ค่าได้ตั้งแต่ในไฟล์ routes.php คือ return ค่าเลย ไม่เรียกแล้วไฟล์ QuestionController.php
โนพลอมแพลม
ฉะนั้นพอสรุปตรงนี้ได้ว่า Laravel นั้นเป็น MVC ที่ไม่จำเป็นต้องเป็น MVC ในทุกๆกรณี
ดูตัวอย่างการเขียน routes.php ให้ return ค่ากลับเลยโดยไม่ต้องเรียกต่อไปยัง controller
ทีนี้ถามว่าถ้าอย่างนั้นเราก็เขียนโค้ดมันในไฟล์ routes.php ทั้งหมดไปเลยก็ได้สิ
ขอตอบว่า มันก็ทำได้ แต่ไฟล์ routes.php ของคุณจะใหญ่โตสักแค่ไหน และโค้ดมันจะหายากเพียงใด ไม่สวยงามเอาเสียเลยใช่มั้ยล่ะ เพราะฉะนั้น ถึงแม้ว่ามันจะสามารถเขียนอย่างนี้ได้ก็จริง แต่ก็เอาไว้ใช้ในสถานการณ์ที่ ต้องการ return อะไรง่ายๆกลับไป ขี้เกียจสร้าง controller และ view
ทีนี้ดูตัวอย่างการเขียน แบบที่เรียกให้ controller ช่วยทำงาน
คำสั่งนี้เป็นการบอกว่า ถ้าหากมีการเรียก /question เข้ามาให้ไปเรียกคลาส QuestionController ฟังก์ชั่น getIndex มาทำงาน
จะเห็นว่าไม่มีการบอกนะว่า QuestionController ถูกเก็บไว้ที่ไหน นั่นเพราะ Laravel มันรู้อยู่แล้วว่า controller ทั้งหมดมันจะถูกเก็บไว้ที่ C:\xampp\htdocs\blog\app\Http\Controllers เราจึงต้องเก็บ controller ให้ถูกที่ไม่งั้น Laravel มันโหลดแล้วจะเฟล
ดูต่อไป เมื่อเรียก controller ขึ้นมาทำงานแล้ว ผมก็ใช้เส้นประชี้ไปยัง model และ view เหตุผลของการใช้เส้นประก็คือ Laravel มันอนุญาติว่า คุณไม่จำเป็นต้องสร้าง model หรือ สร้าง view ก็ได้ ยัดโค้ดลงไปใน controller เลย
แต่ข้อเสียของการยัดอะไรลงไปในไฟล์เดียว ก็คือ ไฟล์ controller มันจะใหญ่ โค้ดมันจะอ่านยาก และเหนือสิ่งอื่นใด ชาวบ้านชาวช่องเขาไม่นิยมทำกัน
ที่ Laravel มันเปิดช่องทางไว้ ถ้าหากคุณต้องการ return อะไรง่ายกลับไป ก็ไม่ต้องสร้าง view หรือหากคุณเขียน API คุณก็ไม่จำเป็นต้องมี view
หลักการใหญ่ๆของ Laravel ก็จะมีประมาณนี้ ให้ลองมองภาพแล้วทำความเข้าใจหลายๆรอบ
บทต่อไปเราจะลงลึกวิธีการเขียน routes.php ซึ่งคำสั่งมันมีหลายคำสั่ง เพื่อให้ซัพพอร์ตการเข้าถึงเว็บไซต์ในหลายๆรูปแบบ
Leave a Reply