Das ist rc router . Dies ist ein einfacher, auf Regex basierender Router, der es Ihnen ermöglicht, Variablen mithilfe von Platzhaltern in Ihrer Route zu übergeben.
Ich habe es getan, um mein Gehirn zu trainieren und ein umfassendes Verständnis davon zu bekommen, wie Routing im PHP-Bereich funktioniert. Anstatt nur darüber zu lesen und davon auszugehen, dass ich weiß, was was bewirkt, habe ich dies geschrieben, um mein Wissen zu festigen.
Verwenden Sie einfach Composer:
composer require robert430404/rc-router
Da es sich um ein Composer-Paket handelt, ist es für das automatische Laden der Klassen auf Composer angewiesen. Anschließend erstellen Sie eine neue Instanz des Router()-Objekts und beginnen mit der Zuweisung Ihrer Routen zur Instanz. Sobald Sie Ihre Routen definiert haben, übergeben Sie Router() an Resolver() und dieser verarbeitet Ihre Routen.
<?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 ' ;
}
Der Router unterstützt sowohl String- als auch Integer-URL-Variablen und gibt sie in einem Array an Sie zurück. Sie können dies beliebig erweitern. Der Router ist sehr flexibel einsetzbar.
Sie können jeder Route entweder einen Abschluss oder eine benannte Handlerfunktion übergeben, um zu steuern, was passiert, wenn eine Route übereinstimmt.
Wenn eine Route nicht gefunden wird, wird vom Resolver eine RouteNotFoundException ausgelöst, die es Ihnen ermöglicht, Ihren 404-Handler abzufangen und dann zu erstellen.
Sie können jetzt auch Ihre eigenen benutzerdefinierten Parser schreiben und diese an den Resolver übergeben, um Dinge wie Controller@Action-Aufrufe viel einfacher und sauberer zu implementieren.
<?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 ' ;
}
Wenn Sie keinen benutzerdefinierten Parser übergeben, wird standardmäßig der integrierte Parser verwendet.
Wenn Ihre Route Platzhalter enthält, werden diese als Array an Sie zurückgegeben, auf das Sie in Ihrem Handler zugreifen können.
Sie haben Zugriff auf String-Platzhalter. Wenn Sie Ihre Routen definieren, verwenden Sie {}, um Zeichenfolgenplatzhalter wie folgt zu definieren:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Sie haben auch Zugriff auf ganzzahlige Platzhalter. Wenn Sie Ihre Route definieren, verwenden Sie {:i}, um ganzzahlige Platzhalter wie folgt zu definieren:
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder:i} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Einfache schließungsbasierte Route:
<?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 ' ;
}
Einfache Route mit einem benannten Handler:
<?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-basierte Route mit Variablen:
<?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-Route mit Variablen und externem Handler:
<?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 ' ;
}
Die Variable „$mapped“ gibt eine Struktur wie diese zurück:
<?php
$ mapped = [
' all ' => [
' id ' => 0 ,
' name ' => ' Robert '
],
' int ' => [
' id ' => 0
],
' string ' => [
' name ' => ' Robert '
],
];