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 绝对是一个值得关注的项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/293156.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32的以太网外设+PHY(LAN8720)使用详解(2):硬件设计

0 工具准备 1.野火 stm32f407霸天虎开发板 2.LAN8720数据手册 3.STM32F4xx中文参考手册1 PHY(LAN8720)硬件配置 1.1 硬件配置引脚说明 在LAN8720上电或复位时会读取一些特定引脚的电平,根据电平来进行硬件配置。LAN8720的引脚分布如下&…

电子合同在物流运输中的场景应用

物流运输行业发展迅速,形成了采购、运输、仓储、配送、代理等全面的产业体系,在业务的开展过程中,各类纸质文件的签章管理如承运协议、运输合同、电子回单、入仓及出仓单据、融资保理协议、代理合作协议、商家入驻协议、员工劳动合同等&#…

构建数字化金融生态系统:云原生的创新方法

内容来自演讲:曾祥龙 | DaoCloud | 解决方案架构师 摘要 本文探讨了金融企业在实施云原生体系时面临的挑战,包括复杂性、安全、数据持久化、服务网格使用和高可用容灾架构等。针对网络管理复杂性,文章提出了Spiderpool开源项目,…

22 3GPP在SHF频段基于中继的5G高速列车场景中的标准化

文章目录 信道模型实验μ参考信号初始接入方法波形比较 RRH:remote radio head 远程无线头 HTS:high speed train 高速移动列车 信道模型 考虑搭配RRH和车载中继站之间的LOS路径以及各种环境(开放或峡谷),在本次实验场…

Sublime Text 3配置 C# 开发环境

Sublime Text 3配置 C# 开发环境 一、引言二、主要内容1. 初识 Sublime Text 32. 初识 C#3. 接入 .NET Framework3.1 下载 .NET Framework3.2 环境变量配置 4. 配置 C# 开发环境5. 编写 C# 代码6. 运行 C# 代码 三、总结 一、引言 C# 是一种面向对象的编程语言,由微…

《深入理解计算机系统》学习笔记 - 第七课 - 机器级别的程序三

Lecture 07 Machine Level Programming III Procedures 机器级别的程序三 文章目录 Lecture 07 Machine Level Programming III Procedures 机器级别的程序三概述程序机制 栈结构栈说明栈定义推入数据弹出数据 调用控制代码示例程序控制流程%rip 传递数据ABI 标准示例 管理局部…

[C++]模板进阶

目录 C模板进阶:: 非类型模板参数 模板的特化 函数模板特化 类模板特化 全特化 偏特化 模板的分离编译 模板总结 C模板进阶:: 非类型模板参数 模板参数可分为类型形参和非类型形参。 类型形参:出现在参数列表中&am…

[Linux] MySQL数据表(数据结构)管理

一、数据库 1.1 数据库的基本概念 数据库(database)是用来组织、存储和管理数据的仓库 数据库管理系统(DBMS):是实现对数据有效组织,管理和存取的系统软件。 数据的建立和维护功能,数据定义…

Python 爬虫之下载视频(三)

批量下载某B主视频 文章目录 批量下载某B主视频前言一、基本思路二、确定遍历循环结构三、基本思路中第12步三、基本思路中第345步总结 前言 上一篇讲了如何去获取标题和视频链接。这篇就跟大家讲一下如何去下载这些视频。本篇会以标题和 视频链接 为突破口,来寻找…

前端传输formDate格式的数据,后端不能用@RequestBody接收

写了个接口,跟前端对接,前端说怎么一直415的报错 我寻思不对啊,我swagger都请求成功了,后来发现前端一直是以formdata格式提交的数据,这样我其实是可以不加RequestBody的; 知识点: RequestBody…

工会排队模式:一种创新的消费体验

随着互联网的普及和电子商务的快速发展,消费者对于购物体验的要求也越来越高。为了满足消费者的需求,许多电商平台和商家都在不断探索新的营销模式。其中,工会排队模式就是一种备受关注的新型消费体验模式。 一、工会排队模式的定义 工会排队…

力扣思维题——寻找重复数

题目链接:https://leetcode.cn/problems/find-the-duplicate-number/description/?envTypestudy-plan-v2&envIdtop-100-liked 这题的思维难度较大。一种是利用双指针法进行计算环的起点,这种方法在面试里很难说清楚,也很难想到。大致做…