webiik / router
路由器是一个被动的、多语言的正则表达式路由器。它支持路由名称、路由参数、路由控制器和路由中间件。
Requires
- php: >=7.2
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();