ceus-media/router

0.5 2023-05-14 03:16 UTC

This package is auto-updated.

Last update: 2024-09-13 02:16:01 UTC


README

Branch Release PHP version PHPStan level

PHP HTTP请求路由器。
支持PHP 8的分支。

示例

最简单:单个JSON文件

作为JSON文件的路由映射

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

如你所见,该路由器适用于CLI和HTTP环境。

控制器类

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

路由器设置

use CeusMedia\Router;

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

解析路由

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

你可以这样执行解析的路由控制器操作

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

在一个文件夹中使用多个JSON文件

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

使用缓存

如果路由文件已更改,则无效化缓存

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

与缓存无效化请求相关的设置

$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 );