ด้วยเฟรมเวิร์คของ PHP ทำไมคอนเซปของ“ เส้นทาง” จึงถูกใช้?


31

เหตุผลที่ฉันถามนี้เพราะสคริปต์ PHP ไม่ใช่เส้นทางใช่ไหม ตัวอย่างเช่นถ้าคุณมี article.php แล้วเส้นทางของคุณเป็นเพียงhttp://mysite.com/article.php

เหตุใดจึงเป็นนามธรรมเพิ่มเติมแนวคิดของเส้นทางเมื่อมันมีอยู่แล้วเป็นไฟล์ง่ายๆ?

คำตอบ:


44

เพื่อให้เข้าใจว่าเราเตอร์ทำอะไรคุณต้องเข้าใจว่าเอ็นจิ้นเขียนใหม่คืออะไร จากบทความวิกิพีเดีย (เหมืองที่เน้น):

เอ็นจินการเขียนซ้ำเป็นซอฟต์แวร์ที่ปรับเปลี่ยนลักษณะที่ปรากฏของเว็บ URL (การเขียน URL ใหม่) URL ที่เขียนซ้ำ (บางครั้งเรียกว่า URL ที่สั้นแฟนซีหรือเป็นมิตรกับเครื่องมือค้นหา - SEF) ใช้เพื่อจัดทำลิงค์ที่สั้นกว่าและมีความเกี่ยวข้องกับหน้าเว็บ เทคนิคการเพิ่มระดับของการแยกระหว่างไฟล์ที่ใช้ในการสร้างหน้าเว็บและ URL ที่นำเสนอให้กับโลก

เมื่อใช้เอ็นจินการเขียนซ้ำคุณจะไม่มีความสัมพันธ์ 1: 1 ระหว่าง URL และสคริปต์ PHP ตัวอย่างจากบทความเดียวกัน:

http://example.com/wiki/index.php?title=Page_title

สามารถเขียนใหม่เป็น:

http://example.com/wiki/Page_title

มีประโยชน์ต่าง ๆในการใช้เทคนิค ตั้งแต่ PHP มักจะคู่แน่นกับ Apache ที่ใช้กันมากที่สุดเขียนเครื่องยนต์mod_rewrite ของ Apache

หากคุณต้องการ URL ที่เขียนขึ้นใหม่คุณต้องมีการกำหนดเส้นทางบางอย่างเนื่องจากการกำหนดเส้นทางเป็นกระบวนการของการรับ URL แบ่งเป็นส่วนต่างๆและตัดสินใจว่าจะเรียกสคริปต์จริง ๆ ว่าอะไร หน้าเอกสารสำหรับเราเตอร์มาตรฐานของ Zend Framework อธิบายกระบวนการเป็น:

การกำหนดเส้นทางเป็นกระบวนการรับปลายทาง URI (ส่วนหนึ่งของ URI ซึ่งมาหลังจาก URL พื้นฐาน) และแยกย่อยเป็นพารามิเตอร์เพื่อพิจารณาว่าโมดูลตัวควบคุมและการกระทำใดของตัวควบคุมนั้นควรได้รับการร้องขอ

ทุกวันนี้เฟรมเวิร์ค PHP ส่วนใหญ่อยู่บนพื้นฐานของรูปแบบ MVCและเฟรมเวิร์กของ MVC กระบวนการดังกล่าวมีลักษณะดังนี้* :

  1. เบราว์เซอร์ชี้ไปที่ URL
  2. เว็บเซิร์ฟเวอร์จับการร้องขอและส่งต่อไปยังจุดเข้าใช้งานทั่วไปซึ่งมักจะเป็นindex.phpสคริปต์
  3. index.php รับ URL และเริ่มกระบวนการกำหนดเส้นทาง
  4. URL ถูกจำแนกเป็นพารามิเตอร์โดยที่ตัวแรกคือตัวควบคุมส่วนที่สองคือวิธีการดำเนินการและส่วนที่เหลือถือเป็นพารามิเตอร์แบบไดนามิก
  5. หากคลาสคอนโทรลเลอร์ที่ตรงกับพารามิเตอร์แรกมีอยู่วัตถุคอนโทรลเลอร์จะถูกสร้างอินสแตนซ์
  6. วิธีการดำเนินการซึ่งมักจะมีฟังก์ชั่นของวัตถุตัวควบคุมเรียกว่าและการกลับมาของมันคือสิ่งที่ส่งกลับไปยังเบราว์เซอร์จริง

การจับคู่พารามิเตอร์กับตัวควบคุมและวิธีการมักใช้การจับคู่ผ่านนิพจน์ทั่วไปเพื่อให้สามารถจัดการกับรูปแบบการกำหนดเส้นทางที่ซับซ้อนและไดนามิกซึ่งเรียกว่าเส้นทาง ตัวอย่างเส้นทางที่ดีสามารถพบได้ในหน้าเอกสารการจัดเส้นทาง URI ของ CodeIgniter :

$ route ['journals'] = "บล็อก";

$ route ['blog / joe'] = "บล็อก / ผู้ใช้ / 34";

$ route ['product / (: any)'] = "แค็ตตาล็อก / product_lookup";

$ route ['product / (: num)'] = "แค็ตตาล็อก / product_lookup_by_id / $ 1";

$routeอาร์เรย์ถือรูปแบบเป็นกุญแจและการกระทำที่เกิดขึ้นเป็นค่าในcontroller/action_method/dynamic_parameterรูปแบบ

*นี่ไม่ได้มีไว้สำหรับอธิบายรายละเอียดของกระบวนการบัญญัติ แต่เป็นคำอธิบายที่เกินความจริง


15
ควรมีตราสัญลักษณ์สำหรับการอธิบายเราเตอร์ mvc โดยไม่ใช้อนุพันธ์ของ "ส่ง" ใด ๆ ...
yannis
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.