Kotchasan PHP Framework

Router หัวใจของเฟรมเวิร์ค

Router ทำหน้าที่สำคัญในการกำหนดเส้นทางการทำงานของเฟรมเวิร์ค โดยมันมีหน้าที่รับข้อมูลเส้นทางมาจาก URL ของเว็บไซต์และทำหน้าที่เลือกเส้นทางที่เหมาะสม นอกจากนี้ Router ยังเป็นด่านแรกของความปลอดภัยอีกด้วย ด้วยการทำหน้าที่สร้าง "กฏ" ของ URL ที่ยอมรับเช่น module ต้องเป็นภาษาอังกฤษเท่านั้น หรือ หมวดหมู่ต้องเป็นตัวเลขเท่านั้น หากรูปแบบของ URL ไม่ตรงตามที่กำหนด (เช่นมีการใส่ XSS มาใน URL) Router ก็จะไม่ทำงาน (ในทางปฎิบัติ หาก Router ไม่พบกฏที่สอดคล้องกับ URL Router จะตัดสินใจเลือกคอนโทรลเลอร์หลักมาทำงานแทน)

ตัวอย่างของรูปแบบของ URL ที่ยอมรับ
  • index.php/module/model/pathto/file/method
  • module/model/file/method
  • index/mvc/file
  • module/cat/id
  • module/cat
  • module/alias
  • module/cat/alias
  • module.php
  • alias.html
จะเห็นว่ารูปแบบ URL ต่างๆที่สนับสนุนข้างต้นเพียงพอที่จะใช้งานเป็น URL ที่สวยงาม (pretty URL) สำหรับเว็บไซต์แล้ว แต่หากคุณมีความจำเป็นต้องใช้ URL ในรูปแบบอื่นคุณก็สามารถกำหนดกฏของ Router ได้ด้วยตัวเองเช่นกัน
ความหมายของตัวแปรแต่ละตัว
  • module จะประกอบด้วยภาษาอังกฤษตัวพิมพ์เล็กเท่านั้น เป็นชื่อโมดูล เช่น modules/index/ ชื่อโมดูลคือ index
  • file หมายถึงหน้าเว็บที่เรียก ภาษาอังกฤษตัวพิมพ์เล็ก ตัวเลข และ _ เท่านั้น และหน้าเพจนี้ต้องมีนามสกุลเป็น .php เช่น file เป็น index จะหมายถึงเรียกไปยังไฟล์ index.php
  • pathto หมายถึงชื่อไดเร็คทอรี่ที่เก็บไฟล์ (file) อยู่ folder จะประกอบด้วยภาษาอังกฤษตัวพิมพ์เล็ก ตัวเลข _ และ / เท่านั้น ค่านี้จะใช้ร่วมกับ file
  • mvc จะหมายถึง model controller หรือ view อย่างใดอย่างหนึ่ง
  • method จะหมายถึงชื่อเมธอดปลายทางที่เรียกใช้งาน ถ้าไม่มีการระบุ method มา Router จะกำหนดให้เรียกไปยังเมธอด index (method จะประกอบด้วย ภาษาอังกฤษตัวพิมพ์เล็ก ตัวเลข และ _ เท่านั้น)
  • cat และ id หมายถึงหมวดหมู่ และ ไอดีของหน้า ซึ่งทั้ง cat และ id จะต้องเป็นตัวเลขเท่านั้น
  • alias ค่านี้จะยอมรับค่าการส่งค่าที่เป็นภาษาไทย เช่น URL เป็น หน้าหลัก.html เมื่อผ่าน Router แล้วจะได้ว่า document=หน้าหลัก

ตัวอย่าง URL เส้นทางการเรียก (Controller หรือ View) และ พารามิเตอร์
URL Class::method() Request
/css/view/index.php Css\Index\View::index()
/index/model/updateprofile.php Index\Updateprofile\Model::index()
/xxxx.php/css/view/index Css\Index\View::index()
/index.php/document/model/settings/save Document\Settings\Model::save()
/index.php/document/model/admin/settings/save Document\Admin\Settings\Model::save()
/module/1/2.html Index\Index\Controller::index() module => module
cat => 1
id => 2
/module/1.html Index\Index\Controller::index() module => module
cat => 1
/module/ทดสอบ.html Index\Index\Controller::index() module => module
alias => ทดสอบ
/module.html Index\Index\Controller::index() module => module
/ทดสอบ.html Index\Index\Controller::index() alias => ทดสอบ
/docs/1/ทดสอบ.html Index\Index\Controller::index() alias => ทดสอบ
module => docs
cat => 1
/index.php Index\Index\Controller::index()
/admin_index.php Index\Index\Controller::index() module => admin_index
  • ในกรณีที่ไม่สามารถระบุคลาสปลายทางจาก URL ได้ จะเป็นการเรียกไปยัง คอนโทรเลอร์หลักแทน คือ Index\Index\Controller
  • ในกรณีที่ไม่สามารถระบุเมธอดปลายทางจาก URL ได้ จะเป็นการเรียกไปยังเมธอด index()
  • Request คือพารามิเตอร์ที่อ่านได้จาก URL ซึ่งจะมีการส่งเป็นพารามิเตอร์ให้กับ เมธอด ที่เรียกใช้