wackyblackie / steampixel-route
这是一个简单、小巧的单类PHP路由器,可以处理PHP项目的所有URL路由。
README
嘿!这是一个简单且小巧的单类PHP路由器,可以处理项目的全部URL路由。它利用正则表达式和PHP的匿名函数创建一个轻量级且快速的路由系统。路由器支持动态路径参数,特殊404和405路由,以及验证请求方法如GET、POST、PUT、DELETE等。代码库非常小,非常易于理解。因此,您可以将其用作更复杂路由器的模板。
看看index.php文件。正如您所看到的,使用Route::add()
方法向您的项目添加新路由。第一个参数接收路径段。您也可以在其中使用正则表达式来解析变量。所有匹配的变量将被推送到第二个参数中定义的处理方法中。第三个参数将匹配请求方法。默认方法是'get'。
📋 简单示例
// Require the class include 'src\Steampixel\Route.php'; // Use this namespace use Steampixel\Route; // Add the first route Route::add('/user/([0-9]*)/edit', function($id) { echo 'Edit user with id '.$id.'<br>'; }, 'get'); // Run the router Route::run('/');
在index.php文件中,您将找到一个包含内置导航的更复杂示例。
🎶 使用Composer安装
只需运行composer require steampixel/simple-php-router
,然后像这样将自动加载器添加到您的项目中:
// Autoload files using composer require_once __DIR__ . '/vendor/autoload.php'; // Use this namespace use Steampixel\Route; // Add your first route Route::add('/', function() { echo 'Welcome :-)'; }); // Run the router Route::run('/');
⛺ 使用不同的基本路径
如果您的脚本位于子文件夹中(例如/api/v1),请在此处设置此基本路径
Route::run('/api/v1');
如果您使用Apache2,请勿忘记编辑.htaccess中的基本路径。
⏎ 使用return而不是echo
您不必使用echo
来输出内容。您也可以使用return
语句。所有返回的内容都将自动输出。
// Add your first route Route::add('/', function() { return 'Welcome :-)'; });
⇒ 使用箭头函数
从PHP 7.4开始,您也可以使用箭头函数来输出内容。因此,您可以轻松使用外部变量,并编写更短的代码。请注意,箭头函数必须始终返回一个值。因此,您不能直接在此处使用echo
。您可以在index.php中找到示例。然而,由于它仅在PHP 7.4中工作,因此它已被禁用。
Route::add('/arrow/([a-z-0-9-]*)', fn($foo) => 'This is a working arrow function example. Parameter: '.$foo );
📖 返回所有已知路由
这非常有用,例如,用于自动生成测试路由或帮助页面。
$routes = Route::getAll(); foreach($routes as $route) { echo $route['expression'].' ('.$route['method'].')'; }
此外,您可以使用像https://github.com/hoaproject/Regex这样的库为不同的表达式生成可工作的示例链接。
🧰 启用区分大小写的路由、尾部斜杠和多匹配模式
Route::run('/', false, false, false);
的第二个、第三个和第四个参数默认设置为false。使用这些参数,您可以切换多个选项
- 第二个参数:您可以通过将第二个参数设置为true来启用区分大小写的模式。
- 第三个参数:默认情况下,路由器将忽略尾部斜杠。将此参数设置为true以避免此行为。
- 第四个参数:默认情况下,路由器将仅执行第一个匹配的路由。将此参数设置为true以启用多匹配模式。
⁉ 有什么不正常的地方吗?
- 请记住,在您的
run()
方法和.htaccess文件中将正确的基路径作为第一个参数设置。 - 如果您使用Apache2,请确保在Apache2设置中启用了mod_rewrite:
a2enmod apache2
- Apache2是否真的加载了.htaccess文件?检查是否在Apache2配置中设置了
AllowOverride All
选项,如下例所示:
<VirtualHost *:80>
ServerName mysite.com
DocumentRoot /var/www/html/mysite.com
<Directory "/var/www/html/mysite.com">
AllowOverride All
</Directory>
</VirtualHost>
🚀 页面、模板、主题、组件
这是一个简单的路由器。因此,没有任何模板。但它与 simplePHPComponents 和 simplePHPPortals 一起工作得非常完美。它包含一个完整的样板项目,包括这些依赖项和这个名为 simplePHPPages 的路由器。您可以用它来构建您的下一个项目。
🎓 需要哪些技能?
请注意,使用此路由器需要您对PHP有基本的了解。许多问题都源于人们缺乏基本的编程知识。因此,您应该具备以下技能:
- 基本的PHP知识
- 基本的PHP正则表达式理解: https://guru99.com.cn/php-regular-expressions.html
- 基本的匿名函数理解以及如何在其中推送数据: https://php.ac.cn/manual/en/functions.anonymous.php
- 基本的包含和引入文件的理解以及如何向它们推送数据: https://stackoverflow.com/questions/4315271/how-to-pass-arguments-to-an-included-file/5503326
- 仅限Windows - 设置IIS和PHP: https://docs.microsoft.com/en-us/iis/application-frameworks/scenario-build-a-php-website-on-iis/configuring-step-1-install-iis-and-php。
- 仅限Windows - 在IIS中创建网站: https://docs.microsoft.com/en-us/iis/get-started/getting-started-with-iis/create-a-web-site。
请注意,如果您在使用此路由器时遇到问题,我们很乐意帮助您。不幸的是,我们没有很多时间,因此我们不能帮助您学习PHP基础知识。
🚢 使用Docker进行测试设置
我创建了一个小的Docker测试设置。
-
构建镜像:
docker build -t simplephprouter docker/image-php-7.2
-
启动容器
- 在Linux / Mac或Windows PowerShell中使用:
docker run -d -p 80:80 -v $(pwd):/var/www/html --name simplephprouter simplephprouter
- 在Windows CMD中使用
docker run -d -p 80:80 -v %cd%:/var/www/html --name simplephprouter simplephprouter
- 在Linux / Mac或Windows PowerShell中使用:
-
打开您的浏览器并导航到 https://
🪟 在Windows中使用IIS进行测试设置
由于IIS现在完全支持PHP,此示例可以使用包含的web.config运行。web.config中有一个重写规则,类似于 .htaccess 重写规则,但专门用于IIS。重写规则将所有传入请求发送到根目录下的 index.php。其余的由简单的PHP路由器处理。
设置
此设置教程假定您知道如何在IIS中创建站点并为http/https和自定义DNS设置绑定。如果您需要更多信息,这篇文章 https://docs.microsoft.com/en-us/iis/get-started/getting-started-with-iis/create-a-web-site 将帮助您完成这部分。
- 如果您还没有安装,请在Windows上安装PHP。这篇文章 安装IIS和PHP | Microsoft Docs 将指导您在Windows机器上安装所需的PHP依赖项。
- 在IIS管理器中,创建一个站点并将物理位置指向simplePHPRouter文件夹的根目录。建议您使用对该文件夹有“读取/写入”权限的帐户连接到物理位置。
- (可选) 在您的hosts文件中创建一个DNS条目,将127.0.0.1指向您为设置网站所使用的域名。
- 浏览到新创建的网站,示例网站现在应该显示。
✅ 待办事项
- 为nginx创建演示配置
📃 许可证
本项目采用MIT许可证。有关更多信息,请参阅LICENSE。