webiik/router

路由器是一个被动的、多语言的正则表达式路由器。它支持路由名称、路由参数、路由控制器和路由中间件。

1.1 2019-08-08 10:16 UTC

This package is auto-updated.

Last update: 2024-09-08 21:54:16 UTC


README

路由器

路由器是一个 被动的、多语言的正则表达式路由器。它支持路由名称、路由参数、路由控制器和路由中间件。 被动 的意思是它不会设置 HTTP 头部,也不会调用路由控制器和中间件。它只是将请求 URI 与定义的路由进行测试,并返回构建路由所需的所有数据。

安装

composer require webiik/router

示例

$router = new \Webiik\Router\Router();

// Set base URI
$router->setBaseURI(dirname($_SERVER['SCRIPT_NAME']));

// Add route(s)
$router->addRoute(['get'], '/', 'Home:run', 'home-page');

// Check if current URI matches some route
$route = $router->match();

if ($router->getHttpCode() == 200) {
    // 200 - OK
    $route->getLang(); // en
    $route->getName(); // home-page
    $route->getController(); // ['Home', 'run']   
} elseif ($router->getHttpCode() == 405) {
    // 405 - Method Not Allowed
} elseif ($router->getHttpCode() == 404) {
    // 404 - Not Found
}

配置

setBaseURI

setBaseURI(string $baseURI): void

setBaseURI() 设置 index.php 文件的基准目录,相对于 web 服务器根目录。

$router->setBaseURI(dirname($_SERVER['SCRIPT_NAME']));

每次您的 index.php 文件不在 web 服务器根目录中时,您都必须设置其位置所在的目录。

setDefaultLang

setDefaultLang(string $defaultLang): void

setDefaultLang() 设置未定义 $lang 参数的路由的默认语言。 $defaultLang 必须是两个字符长。默认值是 en

$router->setDefaultLang('en');

setDefaultLangInURI

setDefaultLangInURI(bool $defaultLangInURI): void

setDefaultLangInURI() 确定默认语言是否是 URI 的一部分,例如 /en/。默认值是 FALSE

$router->setDefaultLangInURI(true);

添加

addRoute

addRoute(array $methods, string $route, string $controller, string $name = '', string $lang = ''): NewRoute

addRoute()NewRoute 添加到 Router 并返回 NewRoute

参数

  • methods 路由 HTTP 方法数组
  • route 路由 URI 正则表达式(不带分隔符)
  • controller 控制器的字符串表示,例如 controllerName:methodName
  • name 路由名称
  • lang 两个字母的路由语言前缀,如果未设置,则使用默认语言
// Add route
$router->addRoute(['get'], '/', 'Home:run');

// Add route with more http methods
$router->addRoute(['get', 'post'], '/contact', 'Contact:run');

// Add named route
$router->addRoute(['get'], '/', 'Home:run', 'home-page');

// Add named route in specific language 
$router->addRoute(['get'], '/', 'Home:run', 'home-page', 'en');

// Add route with route middleware
$router->addRoute(['get'], '/', 'Home:run')->mw('Class:method');

// Add case sensitive route
$router->addRoute(['get'], '/CaMeL', 'Camel:run')->sensitive();

// To add routes with route parameters use regex groups.
// Every regex group represents one route parameter.

// Add route with required parameter
$router->addRoute(['get'], '/portfolio/(?<client>[a-z0-9]+)', 'Portfolio:run');

// Add route with optional parameter
$router->addRoute(['get'], '/portfolio/(?<client>[a-z0-9]+)?', 'Portfolio:run');

检查

match

match(): Route

match() 检查当前请求 URI 是否匹配定义的某些路由并返回 Route

$route = $router->match();

getHttpCode

getHttpCode(): int

getHttpCode() 返回上次 match() 的结果的 HTTP 状态码。

$route = $router->match();
$httpCode = $router->getHttpCode();
if ($httpCode == 200) {
    // 200 OK
} elseif ($httpCode == 405) {
    // 405 Method Not Allowed
} elseif ($httpCode == 404) {
    // 404 Not Found
}

获取

getBaseURL

getBaseURL(): string

getBaseURL() 返回您应用程序的基准 URL,例如 https://www.webiik.com

$baseUrl = $router->getBaseURL();

getURI

getURI(string $routeName, array $parameters = [], string $lang = ''): string

getURI() 返回路由的 URI。如果找不到路由或缺少某些必需的路由参数,则返回空字符串。在调用 getURI() 之后,您可以通过调用 getMissingParameters() 获取缺少的参数。

$route->getURI();

getURL

getURL(string $routeName, array $parameters = [], string $lang = ''): string

getURL()getURI() 相同,但返回完整的 URL。

$route->getURL();

getMissingParameters

getMissingParameters(): array

getMissingParameters() 在调用 getURI()getURL() 之后返回缺少的参数。

$route->getMissingParameters();

getRegexParameters

getRegexParameters(string $routeName, string $lang = '')

getRegexParameters() 返回包含路由正则表达式参数的数组,例如 ['0' => '(?<name>[a-z})?', '1' => '([a-z])']。如果路由不存在,则返回 false。

$route->getRegexParameters();

路由

路由是 match() 的结果。它包含有关当前路由的有用信息。

getController

getController(): array

getController() 返回包含路由控制器和要运行的控制器方法的数组。

$route->getController();

getName

getName(): string

getName() 返回路由名称。

$route->getName();

getLang

getLang(): string

getLang() 返回路由语言。

$route->getLang();

getMw

getMw(): array

getMw() 返回包含路由中间件的数组。

$route->getMw();

getParameters

getParameters(): array

getParameters() 返回在路由构造期间注入的参数,例如 ['name' => 'dolly', '1' => 'dolly', '2' => 'hello']。

$route->getParameters();

资源