2017 © Pedro Peláez
 

library router

image

ceus-media/router

  • Tuesday, January 9, 2018
  • by kriss0r
  • Repository
  • 1 Watchers
  • 0 Stars
  • 291 Installations
  • PHP
  • 1 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 5 Versions
  • 0 % Grown

The README.md

Router

Branch Release PHP version PHPStan level, (*1)

PHP router for HTTP requests.
Branch for PHP 8 support., (*2)

Examples

Simplest: single JSON file

Route map as JSON file:, (*3)

[
    {
        "controller": "Controller_Test",
        "action": "test",
        "pattern": "test :a (:b)",
        "method": "CLI"
    },
    {
        "controller": "Controller_Test",
        "action": "test",
        "pattern": "\/test\/:a\/(:b)",
        "method": "GET"
    }
]

As you can see, the router works for CLI and HTTP environments., (*4)

Controller class:, (*5)

class Controller_Test
{
    public function test( string $a = NULL, ?string $b = NULL ): string
    {
        return 'Called: Controller_Test::test($a, $b)' );
    }
}

Router setup:, (*6)

use CeusMedia\Router;

$source     = Router\Registry\Source\JsonFile::create()->setResource( 'test.json' );
$registry   = Router\Registry::create()->addSource( $source );
$router     = Router\Router::create()->setRegistry( $registry );

Resolving a route:, (*7)

$path   = 'test a1 b2';
$route  = $router->resolve( $path );

You could execute the resolved route controller action like this:, (*8)

$result = \CeusMedia\Common\Alg\Obj\MethodFactory::staticCallClassMethod(
    $route->getController(),
    $route->getAction(),
    [],
    $route->getArguments()
);

Using multiple JSON files in a folder

$source = Router\Registry\Source\JsonFolder::create()->setResource( 'routes/' );

Using a cache on top

Invalidate cache if routes file has changed:, (*9)

$invalidateCache = FALSE;
if( $invalidateCache ){
    $memcache = new Memcache();
    $memcache->connect( 'localhost', 11211 );
    $memcache->delete( 'CeusMediaRouterCliDemo1' );
}

Setup, related to cache invalidation request:, (*10)

$sourceMemcache = new Router\Registry\Source\Memcache( 'localhost:11211:CeusMediaRouterCliDemo1' );
$sourceMemcache->setOption( Router\Registry\SourceInterface::OPTION_AUTOSAVE, TRUE );
$sourceMemcache->setOption( Router\Registry\SourceInterface::OPTION_AUTOLOAD, !$invalidateCache );

...

$registry->addSource( $sourceMemcache );
$registry->addSource( $sourceJsonFile );

The Versions