labelvier/routing

受 Angular 启发的简单端点路由器

该包的规范仓库似乎已丢失,因此该包已被冻结。

1.0.2 2020-04-26 10:53 UTC

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

您可以在端点中添加通配符,它们将被转换为 GuardEndpointController 中的 $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)。