NativePHP:使用 PHP 构建桌面应用程序

PHP 在我心中占据着特殊的位置。它是我的第一份工作,我记得我在家里花了无数个小时做一些小项目。我非常想用 PHP 创建桌面应用程序,但我从来没有做到过。

现在,感谢 NativePHP,我可以了。 NativePHP 追随 Slack、Discord 和 Trello 等流行应用程序的脚步,将您的 PHP 应用程序包装在 Electro 中。它允许后端逻辑在 PHP 上运行,而 UI 则使用 HTML、CSS 和任何 JavaScript 框架构建。

https://nativephp.com/

使用 NativePHP 设置场景

我决定通过将 Laravel 应用程序转换为桌面应用程序来深入研究 NativePHP。为了让你更清楚地了解,让我们从一个基本的设置开始。我正在开发的应用程序有一个 Laravel 后端和一个 React 前端,以 MySQL 数据库作为其骨干。

安装 NativePHP

首先,我们通过 Composer 安装 NativePHP:

$ composer require nativephp/electron

这扩展了 Laravel 的 artisan 工具,增加了一组新的 NativePHP 特定命令,例如 php artisan native 显示了构建和管理本地应用程序的命令列表。

接下来,运行 php artisan native:install 来设置基本结构。

特别值得注意的是两个文件:

  • config/nativephp.php 用于应用程序配置
  • app/Providers/NativeAppServiceProvider.php 用于启动序列和注册本机组件。

运行开发构建

应用程序设置完毕后,我们可以开始开发构建:

$ php artisan native:serve &
$ npm run dev &

我们需要启动 PHP 和 UI 的开发服务器,在本例中, npm 使用 Vite 来构建并为 Electron 窗口提供 UI 组件。

NativePHP 将应用程序与 Electron 捆绑在一起,嵌入了 PHP 解释器。在开发过程中,它将后端切换到本地 SQLite 数据库,因此我们需要使用 php artisan native:migrate 运行迁移来设置新数据库。

添加本地特性

为了增强桌面体验,NativePHP 允许集成本地元素,如通知、菜单栏和热键。

我通过编辑 app/Providers/NativeAppServiceProvider.php 在应用启动时添加了一个简单的通知,这有助于我们给应用带来我们想要的原生感觉。

首先,我们添加通知界面:

use Native\Laravel\Facades\Notification;

然后,在 boot 函数中,在窗口打开后添加以下代码:

Notification::title('Application Started')
    ->message('This message is comming from NativePHP running on Electron')
    ->show();
}

保存后,热重载功能应该会重启应用并显示通知(如果看不到通知,请检查是否没有启用 Electron 的通知)。

构建发布

对于生产版本,我们在 config/nativephp.php 中填写发布细节。值得注意的是,环境文件 ( .env ) 被绑定到构建中,因此敏感数据必须使用 cleanup_env_keys 进行清理。

要为你的操作系统构建一个版本,只需运行:

$ php artisan native:build

这个过程生成各种包,包括 DMG、Zip 文件和应用程序的二进制文件。

我们还可以使用以下命令构建 Windows 和 Linux 包:

$ php artisan native:build win
$ php artisan native:build linux

在构建过程完成后,我们应该得到一个 setup.exe 、AppImage 和 .deb 文件。

NativePHP 的注意事项

在深入了解 NativePHP 之前,需要考虑以下几点:

  1. Alpha 阶段: 目前,NativePHP 处于 alpha 阶段,更倾向于 beta 体验。
  2. Laravel 框架优先:虽然 NativePHP 声称与任何 PHP 框架兼容,但其设计是为 Laravel 量身定制的。
  3. 数据库限制: 数据库支持仅限于本地 SQLite,创建时会替换现有的数据库设置。
  4. 交叉编译限制:虽然它支持针对不同操作系统的构建,但还不支持跨架构的构建。例如,在 M1 芯片上构建的二进制文件无法在大多数 Linux 和 Windows 机器上运行(ARM 构建无法在 Intel 芯片上运行)。一个变通方法是使用不同的机器或 CI/CD 管道进行构建。

结论

NativePHP,即使在 alpha 阶段,对于 PHP 开发者来说,也是一个令人印象深刻且用户友好的框架。它为基于 PHP 的桌面应用程序打开了一个新的可能性世界。如果你正在从事 PHP 开发,NativePHP 绝对是一个值得关注的项目。