exan / poopexpress
A crappy router you shouldn't use
README
It's a router. It's fast. Don't use it.
Using it is a shitty experience, hence PoopExpress.
Usage
You start by initializing the router, with your request details
$router = new PoopExpress($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
You then attempt routes, rather than registering them
$router->attempt([''], ['GET', function () {
echo 'Home page';
}]) || $router->attempt(['somewhere-else'], ['GET' => function () {
echo 'This is a different page';
}]);
This gives you 2 endpoints, with automatic 405 handling:
/
/somewhere-else
Dynamic routes are an option
$router->attempt(['group', '*'], ['GET' => function ($id) {
echo 'This page is within the "group", ', $id;
}]);
And for optimal performance, use this garbage syntax to seperate your routes into groups:
(
$router->group(['group']) && (
$router->attempt(['group', 'nowhere'], ['GET' => function () {
echo 'This page is also within the "group"';
}]) || $router->attempt(['group', 'some-other-group'], ['POST' => function () {
echo 'This page is yet again within the "group"';
}])
)
)
All together:
$router = new PoopExpress($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
$router->attempt([''], ['GET', function () {
echo 'Home page';
}]) || $router->attempt(['somewhere-else'], ['GET' => function () {
echo 'This is a different page';
}]) || (
$router->group(['group']) && (
$router->attempt(['group', 'nowhere'], ['GET' => function () {
echo 'This page is also within the "group"';
}]) || $router->attempt(['group', 'some-other-group'], ['POST' => function () {
echo 'This page is yet again within the "group"';
}]) || $router->attempt(['group', '*'], ['GET' => function ($id) {
echo 'This page is within the "group", ', $id;
}])
)
) || $router->attempt(['not-group', 'page'], ['GET' => function () {
echo 'This is no longer in the group';
}]) || (function () {
http_response_code(404);
echo '404';
})();
How is this fast?
Routes are never registered, and when the "current" route is attempted, parsing of any other route never occurs to any degree. With groups and funky and-gates you can skip the checking of sub-routes if the parent does not match.
Why shouldn't I use it?
If your app is slow, it's very unlikely throwing a new router into the mix will solve your problems.
It's also just plain painful to try to use this.