詹姆斯·列维 / 调度器
是一个简单的PHP应用程序路由引擎。
Requires
- jameslevi/objectify: ^1.0
- jameslevi/string: ^1.0
This package is not auto-updated.
Last update: 2024-09-30 07:06:17 UTC
README
是一个简单的PHP应用程序路由引擎。
功能
- 支持GET、POST、PUT、PATCH、DELETE和HEAD方法。
- 允许您注入基于事件的回调。
- 支持中间件的前后处理。
- 轻量级且易于使用。
安装
- 您可以通过composer进行安装。
composer require jameslevi/dispatcher
- 如果不使用任何框架,请添加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许可证。