bybzmt / router
一个快速的PHP路由器
v1.0.3
2021-12-29 05:06 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-09-04 08:12:59 UTC
README
一个简单快速的PHP路由器
特性
- 静态路由模式
- 动态路由模式
- 支持
GET、POST、PUT、DELETE、OPTIONS、PATCH和HEAD请求方法 - 支持
X-HTTP-Method-Override头部 - 允许
:Class.Method调用 - 自定义404处理
- 反向路由器
先决条件/要求
- PHP 5.3 或更高版本
- URL重写
安装
可以使用 Composer 进行安装
composer require bybzmt/router
使用
// Require composer autoloader require __DIR__ . '/vendor/autoload.php'; // Create Router instance $router = new \Bybzmt\Router\Router(); // Define routes // ... // Run it! $router->run();
路由
使用 $router->handle(method(s), pattern, function)
$router->handle('GET|POST', 'pattern', function() { … }); //or $router->handle('GET|POST', 'pattern', ':Class.Method');
提供单请求方法的缩写
$router->get('pattern', function() { /* ... */ }); $router->post('pattern', function() { /* ... */ }); $router->put('pattern', function() { /* ... */ }); $router->delete('pattern', function() { /* ... */ }); $router->options('pattern', function() { /* ... */ }); $router->patch('pattern', function() { /* ... */ }); //all methods $router->all('pattern', function() { /* ... */ });
路由模式
- 静态路由模式 实际上是 URI,例如
/about - 动态路由模式 是类似于 URI 的 Perl 兼容正则表达式 (PCRE),例如
/movies/(\d+)
动态路由模式中定义的子模式被转换为参数,传递给路由处理函数。先决条件是这些子模式需要定义为括号内的子模式,这意味着它们应该被括号包裹
// Bad $router->get('/hello/\w+', function($name) { echo 'Hello ' . htmlentities($name); }); // Good $router->get('/hello/(\w+)', function($name) { echo 'Hello ' . htmlentities($name); });
:Class.Method 调用
我们可以像这样路由到类动作
$router->get('/(\d+)', ':User.showProfile:id');
自定义404
使用 $router->set404(function) 覆盖默认的 404 处理程序
$router->set404(function() { header('HTTP/1.1 404 Not Found'); // ... do something special here });
反向路由器
$router = new \Bybzmt\Router\Router(); $router->get('/news/(\d+)', ':news.show:id'); $tool = new \Bybzmt\Router\Tool($router->getRoutes()); $data = $tool->convertReverse(); $reverse = new \Bybzmt\Router\Reverse($data); //echo /news/1234 echo $reverse->buildUri('news.show', ['id'=>1234]);
缓存数据
存储数据(file1.php)
$router = new \Bybzmt\Router\Router(); $router->get('/a1', ':example.test'); $router->get('/a2/(\d+)', ':example.test:k1'); $router->get('/a3/(\d+)/(\d+)', ':example.test:k1:k2'); $tool = new \Bybzmt\Router\Tool($router->getRoutes()); //Cache Router Data $code = $tool->exportRoutes(); file_put_contents('routes_cache.php', $code); //Cache Reverse Router Data $code = $tool->exportReverse(); file_put_contents('reverse_cache.php', $code);
恢复数据(file2.php)
//Recovery Router Data $router = new \Bybzmt\Router\Router(require 'routes_cache.php'); //Recovery Reverse Router Data $reverse = new \Bybzmt\Router\Reverse(require 'reverse_cache.php');
感谢
许可证
Apache-2.0