1. Go to this page and download the library: Download phossa/phossa-route 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/ */
phossa / phossa-route example snippets
use Phossa\Route\Dispatcher;
// dispatcher with default collector & resolver
$dispatcher = (new Dispatcher())
->addGet(
'/blog/{action:xd}[/{year:d}[/{month:d}[/{date:d}]]]',
function($result) {
echo "action is " . $result->getParameter('action');
})
->addPost('/blog/post', 'handler2')
->addRoute(new Route\Route(
'GET,HEAD', // multiple methods
'/blog/read[/{id:d}]',
'handler3',
['id' => '1'])); // default $id value
// route base on info provided by server
$dispatcher->dispatch();
// index.php
// ...
// dispatch base on server request info
$dispatcher->dispatch();
$dispatcher->dispatchUrl('GET', '/error404');
// use info from $_SERVER etc.
if ($dispatcher->match()) {
$result = $dispatcher->getResult();
switch($result->getStatus()) {
case 200:
// ...
break;
case 404:
// ...
break;
default:
// ...
break;
}
} else {
// no match found
// ...
}
use Phossa\Route\Route;
use Phossa\Route\Status;
$route = (new Route('GET', '/user/{action:xd}/{id:d}',
function($result) { // handler for Status::OK
$user_id = $result->getParameter('id');
// ...
})->addHandler(Status::METHOD_NOT_ALLOWED, 'handler1'); // extra handler
use Phossa\Route\Status;
$dispatcher->addHandler(
Status::SERVICE_UNAVAILABLE,
function($result) {
// ...
}
);
use Phossa\Route;
// dispatcher with default resolver
$dispatcher = new Route\Dispatcher(
new Route\Collector\Collector(),
new Route\Handler\ResolverAbstract()
);
use Phossa\Route\Dispatcher
use Phossa\Route\Extensions\RedirectToHttpsExtension;
// create dispatcher
$dispatcher = new Dispatcher();
// direct any HTTP request to HTTPS port before any routing
dispatcher->addExtension(new RedirectToHttpsExtension());
$dispatcher->addExtension(
function($result) {
$pattern = $result->getRequest()->getPattern();
if ('/user' == substr($pattern, 0, 5) && !isset($_SESSION['auth'])) {
$result->setStatus(Status::UNAUTHORIZED);
return false; // return to dispatcher level
}
return true; // authed or not in /user
},
Dispatcher::BEFORE_MATCH // run this extension before matching
);
// set default auth handler at dispatcher level
$dispatcher->addHandler(
Status::UNAUTHORIZED,
function($result) {
// display auth page etc.
}
);
$route->addExtension(
function($result) {
$id = (int) $result->getParameter('id');
if ($id > 1000) { // not allowed
$result->setStatus(Status::PRECONDITION_FAILED);
return false;
}
return true;
},
Route::BEFORE_ROUTE // before execute route handler
);
$collector->addExtension(
function($result) {
// collect statistics
},
Collector::BEFORE_COLL // before collector match
)->addExtension(
function($result) {
// collect statistics
},
Collector::AFTER_COLL // after a successful match
);
// match against $_SERVER, $_REQUEST, $_SESSION, $_COOKIE etc.
$route = (new Route('GET', '/user/list/{$id}', 'handler1'))
->addFilter('server.server_name', '(m|www).phossa.com')
->addFilter('cookie.vote_status', 'voted');
// closure takes the value from $_SERVER['SERVER_NAME'] as input
$route->addFilter('server.server_name', function($value) {
switch($value) {
case 'a1.phossa.com':
case 'b2.phossa.com':
return true;
default:
return false; // always return a bool
}
});
// created with default RER collector
$dispatcher = new Dispatcher();
// add supprot for legacy query parameter routing
$dispatcher->addCollector(new CollectorQPR());
use Phossa\Route\Dispatcher;
use Phossa\Route\Regex\ParserStd;
use Phossa\Route\Collector\Collector;
// use standard algorithm
$dispatcher = new Dispatcher(new Collector(new ParserStd));