nabeelalihashmi / lightrouter
快速轻量级的PHP路由器
This package is auto-updated.
Last update: 2024-09-04 09:40:50 UTC
README
LightRouter
一个快速、简单、轻量级的PHP路由器。它还支持中间件。在测试中,它每秒可以处理8000+个请求。
关于作者
特性
* Fast
* Easy
* Lightweight
* Supports Middlewares
* Supports Dynamic Routes
* Supports GET, POST, PUT, DELETE, PATCH, OPTIONS, HEAD
* Handles Custom Responses (user nabeelalihashmi/LightHttp Package)
安装
composer require nabeelalihashmi/lightrouter
可选使用LightHttp包来自定义响应
composer require nabeelalihashmi/lighthttp
基本用法
在你的项目根目录中创建一个新的文件.htaccess。
Options -Indexes
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . public/index.php [L]
以下是index.php的示例代码
<?php
function getRoutes()
{
return [
['GET', '/', [HomeController::class, 'index'], []],
['POST', '/', [HomeController::class, 'posts'], [LoginCheck::class]],
['GET', '/user/someuser/icon', [HomeController::class, 'index'], [LoginCheck::class]],
['GET', '/user/.+', [HomeController::class, 'user'], [LoginCheck::class]]
];
}
$router = new Router;
$router->setRoutes(getRoutes());
$router->setNotFound(function() {
header('HTTP/1.1 404 Not Found');
echo '404 Not Found';
});
$router->run();
以下是示例控制器
<?php
namespace App\Controllers;
class HomeController
{
public function index()
{
echo 'Hi';
}
public function posts() {
echo 'My posts';
}
public function user($id) {
echo 'Here';
var_dump($id);
}
}
以下是示例中间件
<?php
namespace App\Middlewares;
use IconicCodes\LightRouter\IMiddleware;
class LoginCheck implements IMiddleware{
public function handle() {
return true;
}
}
路由
执行
Request -> Before Middlewares -> Callback -> After Middlwares
你可以通过以下方法添加路由
setRoutesaddRoute
但首先你需要了解路由结构。在LightRouter中,路由结构是一个具有此模式的数组
[
'METHOD | String',
'URI | String',
'CALLBACK | Array or Callback',
'BEFORE_MIDDLEWARES | Array'
'After_MIDDLEWARES | Array'
]
你可以逐个设置路由,如下所示
$router->addRoute('GET', '/', [HomeController::class, 'index'], [MyMiddleware::class]);
或者,你可以使用setRoutes方法一次性设置所有路由,如下所示
$router->setRoutes([
['GET', '/', [HomeController::class, 'index'], [MyMiddleware::class]],
['POST', '/', [HomeController::class, 'posts'], [MyMiddleware::class]],
['GET', '/user/someuser/icon', [HomeController::class, 'index'], [MyMiddleware::class]],
['GET', '/user/.+', [HomeController::class, 'user'], [MyMiddleware::class]]
]);
动态路由
LightRouter支持动态路由。你可以在你的URI中使用.+,在回调函数中,你可以根据位置使用变量。
$router->addRoute('GET', '/user/{arg1}/{arg2}', [HomeController::class, 'user'], [MyMiddleware::class]);
class HomeController {
public function user($id, $name) {
var_dump($id);
var_dump($name);
}
}
响应
注意:响应已从LightRouter包中删除,它们现在是LightHttp的一部分。
为了使其模块化和独立,你可以插入LightHttp IResponse或使用自己的。
$router->response_type_interface_name = gettype('IconicCodes\LightHttp\Responses\IResponse);
你也可以创建自己的响应处理器。它必须有一个'handle'方法。
方法
LightRouter只有以下方法
setRoutes(array $routes)
$router->setRoutes([...]);
addRoute($array route)
$router->addRoute('GET', '/', [HomeController::class, 'index'], [MyMiddleware::class]);
run()
$router->run();
setNotFound(callback $callback)
$router->setNotFound(function() {
header('HTTP/1.1 404 Not Found');
echo '404 Not Found';
});
许可
LightRouter在以下条件下发布
- 它不能用于创建成人应用。
- 它不能用于赌博应用。
- 它不能用于创建含有仇恨言论的应用。
MIT许可
版权所有 2022 Nabeel Ali | IconicCodes.com
在此特此授予任何获得本软件及其相关文档文件(以下简称“软件”)副本的人免费使用权,可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供的人这样做,前提是以下条件
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方式中产生的,与软件或其使用或其他交易有关。

