C'est rc router . Il s'agit d'un simple routeur basé sur des expressions régulières qui vous permet de transmettre des variables en utilisant des espaces réservés dans votre itinéraire.
Je l'ai fait pour faire travailler mon cerveau et comprendre pleinement le fonctionnement du routage dans l'espace PHP. Plutôt que de simplement lire à ce sujet et de supposer que je savais ce qui faisait quoi, j'ai écrit ceci pour consolider mes connaissances.
Utilisez simplement composer :
composer require robert430404/rc-router
Il s'agit d'un package composer, il s'appuie donc sur composer pour le chargement automatique des classes. Vous créez ensuite une nouvelle instance de l'objet Router() et commencez à attribuer vos routes à l'instance. Une fois vos itinéraires définis, vous transmettez ensuite le Router() dans le Resolver() et il gère vos itinéraires.
<?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 ' ;
}
Le routeur prend en charge les variables d'URL de chaîne et d'entier et vous les renvoie dans un tableau. Vous pouvez étendre cela comme vous le souhaitez. Le routeur est très flexible dans la façon dont vous pouvez l'utiliser.
Vous pouvez soit transmettre une fermeture, soit une fonction de gestionnaire nommée à chaque route pour contrôler ce qui se passe lorsqu'une route correspond.
Lorsqu'une route n'est pas trouvée, une RouteNotFoundException est levée depuis le résolveur et vous permet d'attraper puis de créer votre gestionnaire 404.
Vous pouvez également désormais écrire vos propres analyseurs personnalisés et les transmettre au résolveur pour rendre des éléments tels que les appels Controller@Action beaucoup plus faciles et plus propres à implémenter.
<?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 ' ;
}
Si vous ne transmettez pas d'analyseur personnalisé, la valeur par défaut est l'analyseur intégré.
Lorsqu'il y a des espaces réservés dans votre itinéraire, ils vous sont renvoyés sous forme de tableau auquel vous pouvez accéder dans votre gestionnaire.
Vous avez accès aux espaces réservés de chaîne. Lorsque vous définissez vos itinéraires, vous utilisez {} pour définir des espaces réservés de chaîne comme ceci :
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Vous avez également accès à des espaces réservés entiers. Lorsque vous définissez votre itinéraire, vous utilisez {:i} pour définir des espaces réservés entiers comme celui-ci :
<?php
$ router -> request ([ ' GET ' ], ' /{placeholder:i} ' , function ( $ mapped ) {
// Deal with returned data and route response here.
});
Itinéraire simple basé sur la fermeture :
<?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 ' ;
}
Route simple avec un gestionnaire nommé :
<?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 ' ;
}
Itinéraire basé sur la fermeture Regex avec des variables :
<?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 ' ;
}
Route Regex avec variables et gestionnaire externe :
<?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 ' ;
}
La variable "$mapped" renvoie une structure comme celle-ci :
<?php
$ mapped = [
' all ' => [
' id ' => 0 ,
' name ' => ' Robert '
],
' int ' => [
' id ' => 0
],
' string ' => [
' name ' => ' Robert '
],
];