2016-05-30_10-59-39

ผังไดอะแกรมที่ผมวาดขึ้นมานี่ ค่อนข้างสำคัญนะครับ มันเป็นตัวอธิบายว่า 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 ซึ่งคำสั่งมันมีหลายคำสั่ง เพื่อให้ซัพพอร์ตการเข้าถึงเว็บไซต์ในหลายๆรูปแบบ