是一个简单的PHP应用程序路由引擎。

v1.0.0 2021-05-06 07:33 UTC

This package is not auto-updated.

Last update: 2024-09-30 07:06:17 UTC


README

是一个简单的PHP应用程序路由引擎。

功能

  1. 支持GET、POST、PUT、PATCH、DELETE和HEAD方法。
  2. 允许您注入基于事件的回调。
  3. 支持中间件的前后处理。
  4. 轻量级且易于使用。

安装

  1. 您可以通过composer进行安装。
composer require jameslevi/dispatcher
  1. 如果不使用任何框架,请添加composer自动加载机制。
require_once __DIR__.'/vendor/autoload.php';

基本实现

<?php

// Make a new router instance.
$router = new Graphite\Component\Dispatcher\Dispatcher();

// Execute callback each time error occurs.
$router->onError(function($request) {

});

// Register middleware #1.
$router->middleware(function($request) {

});

// Register middleware #2.
$router->middleware(function($request) {

});

// Register route #1.
$router->get("/", function($request) {

    return "Home";
});

// Register route #2.
$router->post("/register", function($request) {

    return "Register";
});

// Register after middleware #1.
$router->afterMiddleware(function($request) {

});

// Execute callback each time request ends.
$router->onDestroy(function($request) {

});

// Run your application.
$router->run();

请求方法

GET - 获取资源表示/信息。

$router->get("/members", function($request) {});

POST - 创建新资源。

$router->post("/members", function($request) {});

PUT - 更新现有资源。

$router->put("/members/{id}", function($request) {});

PATCH - 对资源进行部分更新。

$router->patch("/members/{id}", function($request) {});

DELETE - 删除资源。

$router->delete("/members/{id}", function($request) {});

HEAD - 与GET方法相同,但没有主体。

支持多种方法

任何 - 可使用任何请求方法的路由。

$router->any("/dashboard", function($request) {});

匹配 - 支持多种请求方法。

$router->match(array("put", "patch"), "/member/{id}", function($request) {});

事件回调

创建 - 在请求开始时触发。

$router->onCreate(function($request) {});

中间件之前 - 在中间件处理迭代之前触发。

$router->onBeforeMiddleware(function($request) {});

中间件 - 每次调用中间件时触发。

$router->onMiddleware(function($request) {});

中间件中断 - 在中间件内部调用中断时触发。

$router->onMiddlewareAbort(function($request) {});

操作之前 - 在执行路由操作之前触发。

$router->onBeforeAction(function($request) {});

操作之后 - 在执行路由操作之后触发。

$router->onAfterAction(function($request) {});

发送主体 - 当响应主体被发送时触发。

$router->onBodySent(function($request) {});

销毁 - 在请求的末尾触发。

$router->onDestroy(function($request) {});

错误 - 每次发生错误时触发。

$router->onError(function($request) {});

路由匹配 - 如果请求路由匹配时触发。

$router->onRouteMatched(function($request) {});

错误处理

您可以设置所有错误的默认错误回调。

$router->setDefaultErrorCallback(function($request) {

    return $request->responseMessage();
});

您还可以为每个错误代码设置回调。

$router->setErrorCallback(404, function() {
  
    return "Page Not Found";
});

中间件之前

您可以在执行请求操作之前实现多个中间件。

// Register your middleware #1.
$router->middleware(function($request) {

});

// Register your middleware #2.
$router->middleware(function($request) {

});

您还可以使用类实现中间件回调。

<?php

namespace App\Middleware;

class TestMiddleware {

    public function handle($request) {
    
    }
    
}

您现在可以使用这个类作为您的中间件。

$router->middleware('App\Middleware\TestMiddleware@handle');

中间件之后

您还可以在执行路由操作之后实现多个中间件。

$router->afterMiddleware('App\Middleware\TestMiddleware@handle');

操作

这是您希望在每次请求中完成的事情。

$router->get("/", function($request) {

    return "Hello World";
});

控制器

您可以选择在控制器类内部组织所有操作,而不是在闭包中定义所有操作。

<?php

namespace App\Controller;

class MyController {

    public function home($request) {
    
        return "Home";
    }
    
    public function aboutUs($request) {
    
        return "About Us";
    }
    
}
$router->get("/home", "App\Controller\MyController@home");
$router->get("/about-us", "App\Controller\MyController@aboutUs");

GET参数

您可以使用请求对象的get方法访问所有GET参数。

$router->get("/members", function($request) {

    return $request->get("per_page");
});

POST、PUT、PATCH、DELETE参数

您可以使用请求对象的"post"方法检索POST参数。

$router->post("/members/{id}", function($request) {

    return $request->post("token");
});

URI嵌入参数

您还可以使用请求URI的段作为参数。

$router->get("/members/{member_id}", function($request) {

    return $request->member_id;
});

强制中断

您可以使用"abort"方法立即终止请求。

$router->abort(503); // Return "Service Unavailable" response.

头部信息

您可以使用"setHeader"方法分配头部信息。

$router->setHeader("Content-Type", "application/json");

服务可用性

您可以使用"down"方法降低服务可用性。

$router->down();

您还可以单独降低路由。

$router->get('/dashboard', 'App\Controller\MyController@dashboard')->down();

请求助手

方法 - 返回请求期间使用的请求方法。

$request->method();

URI - 返回当前请求URI(不包括查询字符串)。

$request->uri();

端口 - 返回服务器端口号。

$request->port();

协议 - 返回服务器协议。

$request->protocol();

安全 - 确定请求是否通过安全连接。

$request->secure();

本地主机 - 确定请求是否在本地主机上。

$request->localhost();

XMLHttpRequest - 确定请求是否使用XMLHttpRequest。

$request->xmlHttpRequest();

贡献

对于问题、关切和建议,您可以通过nerdlabenterprise@gmail.com给James Crisostomo发送电子邮件。

许可证

本软件包是一个开源软件,许可协议为MIT许可证。