ceus-media / router
0.5
2023-05-14 03:16 UTC
Requires
- php: ^8.1
- ext-memcache: *
- ceus-media/cache: ^0.5 | 0.5.x-dev
- ceus-media/common: ^1.0 | 1.0.x-dev
Requires (Dev)
README
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 );