1. Go to this page and download the library: Download rancoud/router library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
rancoud / router example snippets
composer
// Instantiation
$router = new Router();
// Add routes
$router->get('/posts', function ($request, $next) {
return (new MessageFactory())->createResponse(200, null, [], 'ok');
});
// Find route
$found = $router->findRoute('GET', '/posts');
// You can use PSR-7 request for finding Route
$found = $router->findRouteRequest(new \Rancoud\Http\Message\ServerRequest('GET', '/posts'));
// Dispatch (response is a PSR7 object \Psr\Http\Message\Response)
$response = $router->dispatch($request);
// Display Response
$response->send();
// Methods shortcuts
$router->get('/posts/{id}', function ($request, $next) {});
$router->post('/posts/{id}', function ($request, $next) {});
$router->put('/posts/{id}', function ($request, $next) {});
$router->patch('/posts/{id}', function ($request, $next) {});
$router->delete('/posts/{id}', function ($request, $next) {});
$router->options('/posts/{id}', function ($request, $next) {});
// Any methods
$router->any('/posts/{id}', function ($request, $next) {});
// CRUD method
$router->crud('/posts', function ($request, $next) {});
$router->get('/posts/{id}', function ($request, $next) {});
// inline for simple case
$router->get('/{id:\d+}', function ($request, $next) {});
// complex
$route = new Route('GET', '/{id}', function ($request, $next) {});
$route->setParametersConstraints(['id' => '\d+']);
$router->setGlobalParametersConstraints(['lang' => 'en|fr']);
// {lang} will use the global constraints
$router->get('/article/{lang}', function ($request, $next) {});
// {lang} will use the local constraints define by the route
$router->get('/news/{lang}', function ($request, $next) {})->setParametersConstraints(['lang' => 'jp']);
$route = new Route('GET', '/{id}/{page}', function ($request, $next) {});
$route->setOptionalsParameters(['page' => 1]);
// global middleware for router
$router->addGlobalMiddleware(function ($request, $next) {});
// middleware for only route
$route = new Route('GET', '/{id}', function ($request, $next) {});
$route->addMiddleware(function ($request, $next) {});
// for passing to next middleware
$router->addGlobalMiddleware(function ($request, $next) {
$next($request);
});
// you can add an instance of Router as a middleware
$subRouter1 = new Router();
$subRouter1->any('/api/books/{id}', function ($req, $next){
return (new MessageFactory())->createResponse(200, null, [], 'testRouterception books');
});
$subRouter2 = new Router();
$subRouter2->any('/api/peoples/{id}', function ($req, $next){
return (new MessageFactory())->createResponse(200, null, [], 'testRouterception peoples');
});
$router->addGlobalMiddleware($subRouter1);
$router->addGlobalMiddleware($subRouter2);
// you can add an instance of Router in a Route callback
$subRouter1 = new Router();
$subRouter1->any('/api/books/{id}', function ($req, $next){
return (new MessageFactory())->createResponse(200, null, [], 'testRouterception books');
});
$subRouter2 = new Router();
$subRouter2->any('/api/peoples/{id}', function ($req, $next){
return (new MessageFactory())->createResponse(200, null, [], 'testRouterception peoples');
});
$router->any('/api/books/{id}', $subRouter1);
$router->any('/api/peoples/{id}', $subRouter2);
// you can set a default 404
$router->setDefault404( static function ($request, $next) {
return (new \Rancoud\Http\Message\Factory\Factory())->createResponse(404, '')->withBody(Rancoud\Http\Message\Stream::create('404 content'));
});
// it will return false because no Route is matching
$found = $router->findRoute('GET', '/posts');
// response contains the default 404 callback
$response = $router->dispatch($request);
$response->send();
// create new Router with default 404
$subRouter = new Router();
$subRouter->any('/posts/{id:\d+}', function ($req, $next){
return (new MessageFactory())->createResponse(200, null, [], 'read 1 post');
});
$subRouter->setDefault404( static function ($request, $next) {
return (new \Rancoud\Http\Message\Factory\Factory())->createResponse(404, '')->withBody(Rancoud\Http\Message\Stream::create('404 content from subRouter'));
});
// you can add a Router as middleware
$router->any('/posts/{id}', $subRouter);
// it will return true because Router middleware is matching on /posts/{id}
$found = $router->findRoute('GET', '/posts/incorrect');
// response contains the default 404 callback from $subRouter
$response = $router->dispatch($request);
$response->send();