นี่คือ rc router นี่คือเราเตอร์ที่ใช้ regex แบบธรรมดาที่ให้คุณส่งผ่านตัวแปรโดยใช้ตัวยึดตำแหน่งในเส้นทางของคุณ
ฉันทำเพื่อฝึกสมอง และทำความเข้าใจเกี่ยวกับวิธีการทำงานของการกำหนดเส้นทางในพื้นที่ PHP แทนที่จะแค่อ่านเรื่องนี้และคิดว่าฉันรู้ว่าอะไรทำอะไร ฉันเขียนสิ่งนี้เพื่อเสริมความรู้ของฉัน
เพียงใช้ผู้แต่ง:
composer require robert430404/rc-router
นี่คือแพ็คเกจผู้แต่งดังนั้นจึงอาศัยผู้แต่งสำหรับการโหลดคลาสอัตโนมัติ จากนั้นคุณสร้างอินสแตนซ์ใหม่ของออบเจ็กต์ Router() และเริ่มกำหนดเส้นทางของคุณให้กับอินสแตนซ์ เมื่อคุณกำหนดเส้นทางแล้ว คุณจะต้องส่งเราเตอร์() ไปยัง Resolver() และมันจะจัดการเส้นทางของคุณ
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , function () {
echo ' Closure Handler Test ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
เราเตอร์รองรับตัวแปร URL ที่เป็นสตริงและจำนวนเต็ม และส่งกลับไปให้คุณในอาร์เรย์ คุณสามารถขยายเพิ่มเติมได้ตามที่คุณต้องการ เราเตอร์มีความยืดหยุ่นมากในการใช้งาน
คุณสามารถส่งผ่านการปิดหรือฟังก์ชันตัวจัดการที่มีชื่อไปยังแต่ละเส้นทางเพื่อควบคุมสิ่งที่จะเกิดขึ้นเมื่อมีการจับคู่เส้นทาง
เมื่อไม่พบเส้นทาง RouteNotFoundException จะถูกส่งออกจากตัวแก้ไขและอนุญาตให้คุณตรวจจับและสร้างตัวจัดการ 404 ของคุณ
ตอนนี้คุณสามารถเขียนใน parsers ที่คุณกำหนดเองและส่งผ่านไปยังตัวแก้ไขเพื่อทำให้สิ่งต่าง ๆ เช่นการเรียกใช้ Controller@Action ง่ายขึ้นและสะอาดขึ้นมาก
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
use YourProject Routing CustomParser ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , function () {
echo ' Closure Handler Test ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router , new CustomParser ());
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
หากคุณไม่ผ่านตัวแยกวิเคราะห์ cusom จะมีค่าเริ่มต้นเป็นตัวแยกวิเคราะห์ในตัว
เมื่อมีตัวยึดตำแหน่งในเส้นทางของคุณ พวกเขาจะถูกส่งกลับมาให้คุณเป็นอาร์เรย์ที่คุณสามารถเข้าถึงได้ในตัวจัดการของคุณ
คุณสามารถเข้าถึงตัวยึดตำแหน่งสตริงได้ เมื่อคุณกำหนดเส้นทาง คุณใช้ {} เพื่อกำหนดตัวยึดตำแหน่งสตริงดังนี้:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
คุณยังมีสิทธิ์เข้าถึงตัวยึดตำแหน่งจำนวนเต็มอีกด้วย เมื่อคุณกำหนดเส้นทางของคุณ คุณใช้ {:i} เพื่อกำหนดตัวยึดตำแหน่งจำนวนเต็มดังนี้:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder:i} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
เส้นทางตามการปิดอย่างง่าย:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , function () {
echo ' Closure Handler Test ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
เส้นทางง่ายๆ พร้อมตัวจัดการที่มีชื่อ:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' / ' , ' handler ' );
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
function handler ()
{
echo ' External Handler Test ' ;
}
เส้นทางตามการปิด Regex พร้อมตัวแปร:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' /{id:i}/{post:i} ' , function ( $ mapped ) {
echo ' <pre> ' ;
var_dump ( $ mapped );
echo ' </pre> ' ;
echo ' Route Found ' ;
});
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
เส้นทาง Regex พร้อมตัวแปรและตัวจัดการภายนอก:
<?php
use RcRouter Router ;
use RcRouter Utilities Resolver ;
use RcRouter Exceptions RouteNotFoundException ;
include ' vendor/autoload.php ' ;
$ router = new Router ();
$ router -> request ([ ' GET ' ], ' /{id:i}/{post:i} ' , ' handler ' );
$ uri = $ _SERVER [ ' REQUEST_URI ' ]; // You do not have to use globals here if you have access to a different source.
$ method = $ _SERVER [ ' REQUEST_METHOD ' ]; // You simply need to pass these (uri and method) as strings to the Resolver.
try {
new Resolver ( $ uri , $ method , $ router );
} catch ( RouteNotFoundException $ e ) {
echo ' 404 not found ' ;
}
function handler ( $ mapped )
{
echo ' <pre> ' ;
var_dump ( $ mapped );
echo ' </pre> ' ;
echo ' Route Found ' ;
}
ตัวแปร "$mapped" ส่งกลับโครงสร้างดังนี้:
<?php
$ mapped = [
' all ' => [
' id ' => 0 ,
' name ' => ' Robert '
],
' int ' => [
' id ' => 0
],
' string ' => [
' name ' => ' Robert '
],
];