slabphp / router
SlabPHP 路由器
v0.1.6
2018-02-11 00:00 UTC
Requires
- psr/log: ^1.0
- slabphp/component-interfaces: ^0.2
Requires (Dev)
- phpunit/phpunit: ^6.5
README
此路由器库将接受特别制作的 XML 文件,构建一个路由表,并确定当前 REQUEST_URI 参数是否可以匹配路由。
与其他许多现代开源路由器相比,这个路由器可能相形见绌。我们非常清楚 XML 在许多情况下是受到反对的。这个库是多年前编写的。请参阅 SlabPHP 的主要文档以获取有关此和所有 SlabPHP 库的更多信息。
路由器配置和用法
首先导入库
composer require slabphp/router
然后配置并实例化您的路由器。
$configuration = new \Slab\Router\Configuration();
$configuration
->setConfigurationPaths('/framework/configs','/site/configs'])
->addRouteFile('default.xml');
$router = new \Slab\Router($configuration);
接下来编写您的路由文件并解析一些路由!
$router->determineSelectedRoute();
$route = $router->getSelectedRoute();
根据 $_SERVER['REQUEST_URI'] 的值以及 /framework/configs/default.xml 和 /site/configs/default.xml 中的路由,您将获得 false(404 状态)或 \Slab\Router\Route 对象。
路由创建
静态路由
根据您如何配置路由器,路由文件可能位于任何位置。但这里是一个路由文件的示例
<?xml version="1.0" encoding="UTF-8" ?>
<routes>
<route>
<path>/</path>
<name>Homepage</name>
<class>\Namespace\Path\To\Your\Controller</class>
<parameters>
<someRouteParameter><![CDATA[This could be anything really. Maybe a page title?]]></testValue>
</parameters>
</route>
</routes>
动态路由(模式验证)
您还可以有使用模式验证器的动态路由。例如
<route>
<path>/something</path>
<name>A Dynamic URL Path</name>
<class>\Some\Controller</class>
<pattern>/value/{string:someVar}/thing/{numeric:intVar}</pattern>
<parameters>
<testValue>1</testValue>
<testString>string</testString>
</parameters>
</route>
这将匹配看起来像 /something/value/my-first-string/thing/32 的 URL。注意 {string:someVar} 和 {numeric:intVar}。这些是告诉 SlabPHP 路由器使用特定验证器类和变量名称存储它的机制。您可以创建自己的自定义验证器并简单地指定它们的完整类名。例如,一篇博客文章可能看起来像这样
<route>
<name>Blog URL</name>
<class>\Some\Controller</class>
<path>/</path>
<pattern>/{numeric:year}}/{numeric:month}/{\My\Blog\Router\Validators\PostSlug:postSlug}</pattern>
<parameters>
<testValue>1</testValue>
<testString>string</testString>
</parameters>
</route>
只要 \My\Blog\Router\Validators\PostSlug 实现正确的接口并返回 true/false,您就可以在文章 slug 错误时拒绝此路由。
有一些内置验证器,但许多是特定于应用程序的。
- string - 匹配一组字符的字符串;a-z,0-9,下划线,加号 + 和空格。
- date - 匹配任何可以在 new \DateTime() 构造函数中工作的日期
- numeric - 匹配一个数字
- value - 匹配一个确切值,这在模式字段中的特定 URL 段值内部使用
- any - 匹配任何内容