labelvier / routing
受 Angular 启发的简单端点路由器
该包的规范仓库似乎已丢失,因此该包已被冻结。
Requires
- php: ^7.2
This package is auto-updated.
Last update: 2020-10-26 11:56:04 UTC
README
受 Angular 启发的简单端点路由器。
这个库是做什么用的?
此库用于根据以下 3 个原则创建一个非常简单和快速的基于路由的请求控制器
1) 将 URL(可选通配符)与 EndpointController 匹配
2) 将传入的变量发送到该 EndpointController
3) 使用 Guard 保护端点
使用 composer 安装
$ composer require labelvier/routing
用法
1) 创建一个 .htaccess 或 ngix 重新编写规则,将您的 URL 重新编写为 index.php 并带有 $_GET['route']。例如,/api/v1/hello-world/ 变为 index.php?route=/api/v1/hello-world/。2) 从您的供应商文件夹中要求 autoload.php。3) 初始化您的 RequestController 并向其中添加一些具有自定义 EndpointControllers 的路由。4) 可选地添加一个 Guard 到您的路由。5) 完成这些!现在您可以在自定义 EndpointController 中解析请求。
路由子类
路由包括要匹配的端点、匹配时激活的 EndpointController 以及可选的用于保护请求的 Guard。
您可以在端点中添加通配符,它们将被转换为 Guard 和 EndpointController 中的 $extraArgs。
示例
使用 /hello-world/:firstname/:lastname/,/hello-world/john/doe/ 变为 $extraArgs['firstname'] = 'john' 和 $extraArgs['lastname'] = 'joe'。
new \LabelVier\Models\Route('/hello-world/:firstname/:lastname/', HelloWorldController::class, OptionalGuard::class);
EndpointController 子类
EndpointController 的子类可以包含以下请求方法之一
get($args, $extraArgs)post($args, $extraArgs)put($args, $extraArgs)delete($args, $extraArgs)
如果其中任何一个函数未定义,响应将自动变为 404 not found error。
对于响应,有一个基本的 returnJson($args)
namespace Src\Controllers\EndpointController;
use LabelVier\Controllers\EndpointController;
/**
* Simple example endpoint controller
*
* Class HelloWorldController
* @package Src\Controllers\EndpointController
*/
class HelloWorldController extends EndpointController {
/**
* get example
*
* @param $args
* @param $extraArgs
*/
public function get($args, $extraArgs) {
if(count($extraArgs)) {
$message = 'hello ' . $extraArgs['firstname'] . ' ' . $extraArgs['lastname'];
} else {
$message = 'hello world';
}
if(isset($args['response'])) {
$message .= ' - Your response: ' . $args['response'];
}
$this->returnJson(['response' => $message]);
}
}
Guard
Guard 类将在 canActivate( $route, $extraArgs, $requestMethod ) 中简单地返回 true 或 false,以让 RequestController 知道请求是否可以通过。在这里,您可以检查登录状态、令牌等。
namespace Src\Guards;
use LabelVier\Guards\Guard;
class YouShallPassGuard extends Guard {
/**
* Always pass :)
*
* @param Route $route
* @param string $extraArgs
* @param string $requestMethod
*
* @return bool
*/
public function canActivate( $route, $extraArgs, $requestMethod ) {
return true;
}
}
示例设置。例如 index.php(或其他“着陆”PHP 文件)
一个包含所有类的示例文件。您可以使用任何其他变量作为路由,但您需要在 $request->parseRequest($custom_route); 中设置此变量。
require( 'vendor/autoload.php' );
// routes
use LabelVier\Controllers\RequestController;
use LabelVier\Models\Route;
use Src\Controllers\EndpointController;
use Src\Guards;
// routes setup
$request = RequestController::getInstance();
$request->setRoutes([
new Route( '/api/v1/login', EndpointController\LogInController::class ),
new Route( '/api/v1/token-check', EndpointController\TokenCheckController::class, Guards\JWTGuard::class ),
new Route( '/api/v1/hello-world', EndpointController\HelloWorldController::class),
new Route( '/api/v1/hello-world/:firstname/:lastname', EndpointController\HelloWorldController::class, Guards\YouShallPassGuard::class ), // /api/v1/hello-world/label/vier
]);
// parse the request. The route var is optional and can be anything you want.
$request->parseRequest();
版本历史
1.0.2
- 更好的路由解析和 EndpointController / Guard 设置
- 将 http 响应移动到单独的控制器
1.0.1
- 带可选路由字符串解析请求。
1.0.0
- 初始导入和 README。
贡献指南
- 您始终可以创建拉取请求以帮助改进库。
我该和谁联系?
- 您可以在 bitbucket 的问题跟踪器中提交问题或建议。
- 或者联系仓库所有者或管理员(Label Vier)。