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