dariorieke / router
There is no license information available for the latest version (dev-master) of this package.
A php router with regex url parameter resolving
dev-master
2020-12-05 13:06 UTC
Requires (Dev)
- phpunit/phpunit: ^9
This package is auto-updated.
Last update: 2024-12-05 22:30:03 UTC
README
A php router which maps routes with named parameters to callbacks
Installation
install via composer
"require": {
"dariorieke/router": "dev-master"
}
Running tests
run tests with the following command
./vendor/bin/phpunit .\tests
Usage
Basic Usage
Use the router to match paths and run callbacks
use DarioRieke\Router\RouteCollection;
use DarioRieke\Router\Route;
use DarioRieke\Router\Router;
use DarioRieke\Router\Exception\MethodNotAllowedException;
use DarioRieke\Router\Exception\NotFoundException;
//collection of routes
$routeCollection = new RouteCollection();
//add a route to the collection
$routeCollection->add(new Route(
//url to match
'/home/',
//callback to run if route is matched
function() {
echo "Hello World!";
}
));
//add collection to the router
$router = new Router($routeCollection);
try {
//match a route to a given path
$result = $router->match('/home/', 'GET');
}
catch (MethodNotAllowedException | NotFoundException $e) {
//when no matching route is found a NotFoundException will be thrown
//when the HTTP method does not match a MethodNotAllowedException will be thrown
}
//get the callback
$callback = $result->getCallback();
//run it
$callback();
Usage with URL parameters
You can use url parameters with regex
$routeCollection->add(new Route(
//url to match with a named parameter
'/api/user/{username}/',
//callback to run if route is matched
function($username) {
echo "Hello $username!";
}
));
To get the parameters values, use the RoutingResult
$result = $router->match('/api/user/Administrator3000/');
//get all parameters from the url
$routeParameters = $result->getArguments();
//get the callback
$callback = $result->getCallback();
//run the callback with the parameter from the route
$callback($routeParameters['username']);
You can also provide custom regex patterns for your parameters with the third parameter of the Route
s constructor. If the pattern is not matched by any route a NotFoundException
will be thrown.
$routeCollection->add(new Route(
//url to match with a named parameter
'/api/user/{username}/',
//callback to run if route is matched
function($username) {
echo "Hello $username!";
},
[
//now the route will only match letters of the alphabet
'username' => '[a-zA-Z]+'
]
));
Different HTTP methods
The last parameter of the Route Constructor is an array of allowed HTTP methods:
$routeCollection->add(new Route(
//url to match with a named parameter
'/api/user/{username}/',
//callback to run if route is matched
function($username) {
echo "Hello $username!";
},
[
//now the route will only match letters of the alphabet
'username' => '[a-zA-Z]+'
],
//only POST and HEAD are allowed
['POST', 'HEAD']
));