steampixel/simple-php-router

这是一个简单小巧的PHP路由器,可以处理您项目的整个URL路由。

0.7.1 2022-10-12 18:04 UTC

This package is auto-updated.

Last update: 2024-09-12 22:26:15 UTC


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>

🚀 页面、模板、主题、组件

这是一个简单的路由器。因此,根本没有模板。但是,它可以与simplePHPComponentssimplePHPPortals完美配合工作。这是一个包含这些依赖项和这个路由器的完整样板项目,称为simplePHPPages。您可以用它来构建您的下一个项目。

🎓 您需要哪些技能?

请注意,对于这个路由器,您需要对PHP有基本的了解。许多问题源于人们缺乏基本的编程知识。因此,您应该具备以下技能:

请注意,如果您在这个路由器上遇到问题,我们很乐意帮助您。不幸的是,我们没有太多时间,因此我们无法帮助您学习PHP基础知识。

🪛 使用Docker进行测试设置

我已经创建了一个小的Docker测试设置。

  1. 构建镜像:docker build -t simplephprouter docker/image-php-7.2

  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
  3. 打开您的浏览器,导航到https://

🪟 在Windows中使用IIS进行测试设置

由于IIS现在完全支持PHP,此示例可以使用包含的web.config运行。web.config中有一个重写规则,类似于.htaccess重写规则,但专门针对IIS。重写规则会将所有传入请求发送到根目录下的index.php。其余的由简单的PHP路由器完成。

设置

本设置教程假设您已经具备在IIS中创建站点并设置http/https和自定义DNS绑定的知识。如果您需要更多信息,这篇文章将帮助您完成这部分。

  1. 如果您还没有这样做,请在Windows上安装PHP。这篇文章将指导您在Windows机器上安装所需的PHP依赖项。
  2. 在 IIS 管理器中创建一个站点,并将物理位置指向 simplePHPRouter 文件夹的根目录。建议您使用具有对该文件夹“读/写”权限的账户连接到物理位置。
  3. (可选) 在您的 hosts 文件中创建一个 DNS 条目,将 127.0.0.1 指向您为设置站点使用的域名。
  4. 浏览到新创建的网站,现在应该可以显示示例站点。

✅ 待办

  • 为 nginx 创建演示配置

📃 许可证

本项目遵循 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。