steampixel / simple-php-router
这是一个简单小巧的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
语句。所有返回的内容都将自动echo。
// 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://www.guru99.com/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绑定的知识。如果您需要更多信息,这篇文章将帮助您完成这部分。
- 如果您还没有这样做,请在Windows上安装PHP。这篇文章将指导您在Windows机器上安装所需的PHP依赖项。
- 在 IIS 管理器中创建一个站点,并将物理位置指向 simplePHPRouter 文件夹的根目录。建议您使用具有对该文件夹“读/写”权限的账户连接到物理位置。
- (可选) 在您的 hosts 文件中创建一个 DNS 条目,将 127.0.0.1 指向您为设置站点使用的域名。
- 浏览到新创建的网站,现在应该可以显示示例站点。
✅ 待办
- 为 nginx 创建演示配置
📃 许可证
本项目遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。