netherphp/avenue

请求路由器。

v4.0.3 2022-02-22 16:43 UTC

README

Packagist Build Status codecov

一个基于 PHP 8+ 注解的请求路由器。它能够扫描路由/控制器目录,以确定哪些应该被执行以满足传入的请求。

路由可以通过 RouteHandler 属性定义,它们愿意响应的路径、域和 HTTP 动词。它们还可以从 URI 中提取信息并将它们传递给方法。它将确保数据类型与方法签名上声明的类型相匹配。

根据请求参数(动词、域和路径)检查路由是否能够处理请求。然后询问路由是否愿意处理请求。可以使用具有 ConfirmWillAnswerRequest 属性的方法定义一个仅用于检查路由处理器愿意度的方法。

路由器能够实时扫描目录以生成路由映射(适用于开发),同时还有一个供应商 bin 脚本 netherave,它能够生成静态路由映射文件,路由器将加载此文件以加快速度。

快速入门

如何在全新的项目中设置和使用库的说明。

文档

所有现有文档目前都位于 GitHub wiki 上。

示例路由器(www\index.php)

require('vendor/autoload.php');

$Config = Nether\Avenue\Library::PrepareDefaultConfig();
$Router = new Nether\Avenue\Router($Config);
$Router->Run();

示例路由(routes\Home.php)

namespace Routes;

use Nether\Avenue;

class Home
extends Avenue\Route {

	#[Avenue\Meta\RouteHandler('/index')]
	public function
	Index():
	void {

		echo 'Home Page.';
		return;
	}

	#[Avenue\Meta\RouteHandler('/dashboard')]
	#[Avenue\Meta\ConfirmWillAnswerRequest]
	public function
	Dashboard():
	void {

		echo 'User Dashboard.';
		return;
	}

	public function
	DashboardWillAnswerRequest():
	int {

		$User = YourAppSessionLib::GetCurrentUser();

		if($User && $User->CanHasDashboard())
		return Avenue\Response::CodeOK;

		return Avenue\Response::CodeForbidden;
	}

	#[Avenue\Meta\ErrorHandler(403)]
	public function
	HandleForbidden():
	void {

		echo "Dude No.";
		return;
	}

	#[Avenue\Meta\ErrorHandler(404)]
	public function
	HandleNotFound():
	void {

		echo "Bruh Wut?";
		return;
	}


}

示例静态映射生成(CLI)

$ netherave gen routes --show
Route Directory: routes
Route File: ./routes.phson

Summary:
 * GET (2)
   Routes\Home::Index
   Routes\Home::Dashboard

 * Error Handlers (2)
   Routes\Home::HandleForbidden
   Routes\Home::HandleNotFound

注意

这不是一个 PSR 兼容的任何内容。它按其方式行事。