Berlioz Router is a PHP library for manage HTTP routes, respecting PSR-7 (HTTP message interfaces) standard.
You can install Berlioz Router with Composer, it's the recommended installation.
$ composer require berlioz/router- PHP ^8.0
- Packages:
- berlioz/http-message
- psr/log
You can create simple route like this:
use Berlioz\Router\Route;
$route = new Route('/path-of/my-route');
$route = new Route('/path-of/my-route/{attribute}/with-attribute');Constructor arguments are:
- defaults: an associated array to set default values of attributes when route is generated
- requirements: an associated array to restrict the format of attributes. Key is the name of attribute and value is the validation regex
- name: name of route
- method: an array of allowed HTTP methods, or just a method
- host: an array of allowed hosts, or just a host
- priority: you can specify the priority for a route (default: -1)
A route can be transformed to a group, only associate another route to them.
use Berlioz\Router\Route;
$route = new Route('/path');
$route->addRoute($route2 = new Route('/path2')); // Path will be: /path/path2Children routes inherit parent route attributes, requirements, ...
Route accept optional attributes, you need to wrap the optional part by brackets.
$route = new \Berlioz\Router\Route('/path[/optional-part/{with-attribute}]');You can also define requirements directly in the path :
- Add a regular expression after the name of attribute (separate by ":").
- Add a type name after the name of attribute (separate by "::").
$route = new \Berlioz\Router\Route('/path/{attributeName:\d+}');
$route = new \Berlioz\Router\Route('/path/{attributeName::int}');Supported defined types:
int(equivalent of\d+)float(equivalent of\d+(\.\d+))uuid4(equivalent of[0-9A-Fa-f]{8}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{4}\-[0-9A-Fa-f]{12})slug(equivalent of[a-z0-9]+(?:-[a-z0-9]+)*)md5(equivalent of[0-9a-fA-F]{32})sha1(equivalent of[0-9a-fA-F]{40})domain(equivalent of([a-zA-Z0-9]([a-zA-Z0-9\-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,6})
The router is the main functionality in the package, it is defined by Router class. He is able to find the
good Route object according to a ServerRequestInterface object (see PSR-7).
use Berlioz\Http\Message\ServerRequest;
use Berlioz\Router\Route;
use Berlioz\Router\Router;
// Create server request or get them from another place in your app
$serverRequest = new ServerRequest(...);
// Create router
$router = new Router();
$router->addRoute(
new Route('/path-of/my-route'),
new Route('/path-of/my-route/{attribute}/with-attribute')
);
$route = $router->handle($serverRequest);| Options | Type | Description |
|---|---|---|
| X-Forwarded-Prefix | boolean/string | Default to false, true to use "X-Forwarded-Prefix" value or custom name of header |
You can generate a path with some parameters directly with Router object.
use Berlioz\Router\Exception\NotFoundException;
use Berlioz\Router\Router;
$router = new Router();
// ...add routes
try {
$path = $router->generate('name-of-route', ['attribute1' => 'value']);
} catch (NotFoundException $exception) {
// ... not found route
}The return of method, is the path in string format or thrown an exception if not able to generate path (not all required parameters for example).
You can be valid a ServerRequestInterface to known if a path can be treated by a route.
use Berlioz\Http\Message\ServerRequest;
use Berlioz\Router\Router;
$serverRequest = new ServerRequest(...);
$router = new Router();
// ...add routes
/** bool $valid Valid path ?*/
$valid = $router->isValid($serverRequest);The return of method is a boolean value.