2017 © Pedro Peláez
 

library router

PHP 7 Router implementation on top of fast route

image

ecfectus/router

PHP 7 Router implementation on top of fast route

  • Thursday, November 24, 2016
  • by leemason
  • Repository
  • 1 Watchers
  • 1 Stars
  • 15 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 1 Versions
  • 0 % Grown

The README.md

Ecfectus Router

Build Status, (*1)

PHP 7 Router implementation., (*2)

The ecfectus router is a lean, fast and cachable PHP router with no dependencies., (*3)

The router has been made lean by not needing any knowledge of a request, it is quite simply a pattern matcher, which matches a path pattern against a route., (*4)

Usage

$router = new \Ecfectus\Router\Router();

/**
 * Basic Requests
 */

//get requests
$router->get('/url')
    ->setHandler('Class@method');

//post requests
$router->post('/url')
    ->setHandler('Class@method');

//put requests
$router->put('/url')
    ->setHandler('Class@method');

//patch requests
$router->patch('/url')
    ->setHandler('Class@method');

//delete requests
$router->delete('/url')
    ->setHandler('Class@method');

/**
 * Route Params
 */

//args and optional args
$router->get('/url/{arg}/{optionalarg?}')
    ->setHandler('Class@method');

//only matches number
$router->get('/url/{arg:number}')
    ->setHandler('Class@method');

//only matches words
$router->get('/url/{arg:word}')
    ->setHandler('Class@method');

//only matches alpha numeric + dashs
$router->get('/url/{arg:alphanumdash}')
    ->setHandler('Class@method');

//only matches slugs
$router->get('/url/{arg:slug}')
    ->setHandler('Class@method');

//only matches uuids
$router->get('/url/{arg:uuid}')
    ->setHandler('Class@method');

/**
 * Named Routes
 */

$router->get('/url')
    ->setName('routename')
    ->setHandler('Class@method');

/**
 * Domain Routes
 */

$router->get('/url')
    ->setDomain('domain.com')
    ->setHandler('Class@method');

// domain placeholders
$router->get('/url')
    ->setDomain('{subdomain}.domain.com')
    ->setHandler('Class@method');

/**
 * Grouped routes
 */

$router->group([
        'path' => '/api',
        'name' => 'api',
        'domain' => 'domain.com'
    ], function($r){

        $r->get('/users') // becomes domain.com/api/users
            ->setName('users') // becomes api.users
            ->setHandler('Class@method');

        //groups can be nested
    });

/**
 * Prepare Router before matching
 */
try{
    $router->prepare();
}catch( Exception $e){

}

/**
 * Match routes
 */
try{

    $route = $router->match('hello.domain.com/url', 'GET'); // $path, $method = 'GET|POST|PUT|PATCH|DELETE'

    $values = $route->getValues(); // ['subdomain' => 'hello']

}catch( \Ecfectus\Router\NotFoundException $e){
    //no route matched
}catch( \Ecfectus\Router\MethodNotAllowedException $e){
    //route matched but method not allowed
}catch( \Exception $e){

}

Cached Router

By using the cached router you can export the compiled router and restore the instance from a file, bypassing the compile process and increasing performance., (*5)

$router = \Ecfectus\Router\CachedRouter::create('routes.php');

if(!$router->isCached()){

    //add routes here

    try{
        //prepare and export the router to the file.
        $router->prepare();
        $router->export();
    }catch( Exception $e){

    }
}

try{

    $route = $router->match('hello.domain.com/url', 'GET'); // $path, $method = 'GET|POST|PUT|PATCH|DELETE'

    $values = $route->getValues(); // ['subdomain' => 'hello']

}catch( \Ecfectus\Router\NotFoundException $e){
    //no route matched
}catch( \Ecfectus\Router\MethodNotAllowedException $e){
    //route matched but method not allowed
}catch( \Exception $e){

}

The Versions

24/11 2016

dev-master

9999999-dev https://github.com/ecfectus/router

PHP 7 Router implementation on top of fast route

  Sources   Download

MIT

The Requires

 

The Development Requires

by Avatar leemason