jblond / php-router
一个简单的 PHP 路由类
v3.0.0
2023-12-05 13:58 UTC
README
一个简单的 PHP 路由类
代码行数少于300行,包含注释
支持
- lambda URL
- :any 任何符号
- :num 只能是数字
- :all 所有字符
- :an A-Z a-z 0-9
- :url A-Z a-z 0-9 - _
- :hex 十六进制
- 正则表达式 URL,例如 /user/(.*)/edit
- 可选子路由
- 在子目录中工作,如果使用
->set_basepath('/yoursubdir')
- 自定义响应头
- 下载
- 头信息
- 重定向
- 503错误
安装
composer require jblond/php-router
示例
静态路由
require 'jblond/Autoloader.php'; new \jblond\Autoloader(); $router = new \jblond\router\Router(); $router->setBasepath(''); $router->init(); $router->add('/', function () { echo 'Welcome'; }); $router->add('/info/', function () { phpinfo(); }); $router->add('/test.html', function () { echo 'test.html Welcome'; }); $router->add('/post/', function () { require 'post.html'; }); $router->post('/post/reciver/', function () { print_r($_POST); }); $router->run();
动态路由
$router->add('/user/(.*)/edit', function ($id) { echo 'Edit user with id ' . $id; }); $router->get('/test/(:any)', function () { print_r(filter_input(INPUT_SERVER, 'REQUEST_URI')); });
与其他库的集成,即使用闭包
$tpl = new \Acme\Template\Template(); $router->add('/closure', function () use ($tpl) { // $tpl->... echo 'closure'; });
定义404未找到页面
$router->add404(function ($url) { header("HTTP/1.0 404 Not Found"); echo '404 :-( ' . $url; }); $router->run();
响应
$router->get('/503/', function (){ $response = new \jblond\router\Responses(); $response->error503(); });
可选子模式
可以使用 ?
后跟常规模式来制作可选路由子模式。
$router->get( '/phonebook(\/[A-Za-z]+(\/[A-Za-z]+(\/[A-Za-z]+(\/[0-9-]+)?)?)?)?/', function ($lastname = null, $surname = null, $street = null, $number = null) { if(!$lastname) { echo 'Phonebook all entries'; return; } if(!$surname){ echo 'Phonebook lookup lastname: ' . $lastname; return; } if(!$street){ echo 'Phonebook lookup lastname: ' . $lastname . ' Surname: ' . $surname; return; } if(!$number){ echo 'Phonebook lookup lastname: ' . $lastname . ' Surname: ' . $surname . ' Street: ' . $street; return; } echo ' FULL SEARCH'; });
也可以用于测试您的正则表达式: http://www.phpliveregex.com/ 使用 preg_match
Apache重写配置
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [QSA,L]
在 Apache 2.4 中,您可以使用
FallbackResource /index.php