nabeelalihashmi/lightrouter

快速轻量级的PHP路由器

v1.0.2 2022-06-27 15:18 UTC

This package is auto-updated.

Last update: 2024-09-04 09:40:50 UTC


README

LightRouter

LightRouter

一个快速、简单、轻量级的PHP路由器。它还支持中间件。在测试中,它每秒可以处理8000+个请求。

LightRouter Speed Test

关于作者

Nabeel Ali

网站: https://iconiccodes.com

邮箱: mail2nabeelali@gmail.com

特性

* 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

你可以通过以下方法添加路由

  1. setRoutes
  2. addRoute

但首先你需要了解路由结构。在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

在此特此授予任何获得本软件及其相关文档文件(以下简称“软件”)副本的人免费使用权,可以在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本,并允许向软件提供的人这样做,前提是以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、针对特定目的的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是在合同、侵权或其他方式中产生的,与软件或其使用或其他交易有关。