Ini adalah rc router . Ini adalah router berbasis regex sederhana yang memungkinkan Anda meneruskan variabel dengan menggunakan placeholder di rute Anda.
Saya melakukannya untuk melenturkan otak saya, dan mendapatkan pemahaman penuh tentang cara kerja perutean di ruang PHP. Daripada hanya membaca tentang hal itu dan berasumsi saya tahu apa dan apa, saya menulis ini untuk memperkuat pengetahuan saya.
Cukup gunakan komposer:
composer require robert430404/rc-router
Ini adalah paket composer sehingga bergantung pada composer untuk memuat kelas secara otomatis. Anda kemudian membuat instance baru dari objek Router() dan mulai menetapkan rute Anda ke instance tersebut. Setelah rute Anda ditentukan, Anda kemudian meneruskan Router() ke Resolver() dan itu menangani rute Anda.
<?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 ' ;
}
Router mendukung variabel url string dan integer, dan meneruskannya kembali kepada Anda dalam sebuah array. Anda dapat memperluasnya lebih jauh dengan cara apa pun yang Anda inginkan. Router sangat fleksibel dalam cara Anda menggunakannya.
Anda bisa meneruskan penutupan, atau fungsi pengendali bernama ke setiap rute untuk mengontrol apa yang terjadi ketika suatu rute cocok.
Ketika rute tidak ditemukan, RouteNotFoundException dilemparkan dari penyelesai dan memungkinkan Anda menangkap dan kemudian membuat pengendali 404 Anda.
Kini Anda juga dapat menulis di parser khusus Anda sendiri dan meneruskannya ke dalam penyelesai untuk membuat hal-hal seperti panggilan Controller@Action jauh lebih mudah dan lebih bersih untuk diterapkan.
<?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 ' ;
}
Jika Anda tidak meneruskan parser khusus, parser defaultnya adalah parser bawaan.
Ketika ada placeholder di rute Anda, mereka dikembalikan kepada Anda sebagai array yang dapat Anda akses di handler Anda.
Anda memiliki akses ke placeholder string. Saat mendefinisikan rute, Anda menggunakan {} untuk mendefinisikan placeholder string seperti ini:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Anda juga memiliki akses ke placeholder bilangan bulat. Saat menentukan rute, gunakan {:i} untuk menentukan placeholder bilangan bulat seperti ini:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder:i} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Rute berbasis penutupan sederhana:
<?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 ' ;
}
Rute sederhana dengan pengendali bernama:
<?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 ' ;
}
Rute berbasis penutupan regex dengan variabel:
<?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 ' ;
}
Rute regex dengan variabel dan pengendali eksternal:
<?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 ' ;
}
Variabel "$mapped" mengembalikan struktur seperti ini:
<?php
$ mapped = [
' all ' => [
' id ' => 0 ,
' name ' => ' Robert '
],
' int ' => [
' id ' => 0
],
' string ' => [
' name ' => ' Robert '
],
];