构建事件新闻第 1 部分
嘿那里!在开始之前请注意...我已经很长时间没有写信了。多年来我一直威胁要这样做,最后我发现这是一个很好的话题。我有点生疏,但会努力坚持下去,希望能有所进步。
EventPress 可能是我所做的最重要的事情。我从一开始就参与其中,该应用程序在过去 10 年中经历了 3 个主要版本,呈指数级增长。版本 4 现已发布,在我们处理它的过程中我想更改一些更改。
首先,介绍一点历史。 EventPress 归 HotPress Media 所有,之所以成立是因为客户需要一个简单的解决方案来管理事件 RSVP,以取代他们的 Excel 电子表格。 EventPress 的第一个版本很丑陋。没有规范,我们在没有适当计划的情况下运行了该项目,最终得到了一大碗意大利面条。但它奏效了,并帮助我们踏入了南非最大的公司之一的大门。
版本 2 是一个巨大的飞跃。我们在接口方式上没有太大的改变,但是底层框架却发生了很大的变化。 EventPress 被迁移到 Laravel(当时的版本 5),尽管版本 1 中的很多代码都转移到了版本 2,但结构要好得多,我们遇到的问题也少得多。那时我们仍然没有任何类型的测试套件,我们基本上是在“它可以在我的机器上运行”的基础上进行测试。不太好。
版本 3 对 UI 进行了彻底修改,Tailwind 成为首选 CSS 框架。尽管仍然有相当多的版本 1 代码隐藏在黑暗的角落,但大量代码已被更改。第 3 版的一个重大变化是全新的分发系统。在此过渡期间,我们学到了很多有关发送群发邮件的知识。
许多面向公众的 UI 都是版本 2 的直接副本。即使现在,与会者看到的大部分内容仍然是版本 2 的代码。相反,版本 3 为代码库带来了更多的结构。某种逻辑开始出现。我们编写了瘦控制器并严重依赖服务容器。版本 3 也是 EventPress 第一个带有测试套件的版本。
我编写 PHP 代码已经很长时间了,但我是自学的。 EventPress 就像被扔进了深渊,没有任何关于如何游泳的指导。这是一个巨大的学习曲线,但它让我达到了今天的水平。我自己构建了这个东西,其他开发人员的投入很少。
这一次,我将通过博客记录 EventPress 4 的开发过程。不是因为我要寻求认可,而是因为我想把这一次记录下来。也许我的解决方案可以帮助其他独立开发人员。我学到了很多关于构建和运行大型 PHP 应用程序的知识。
EventPress 4 将进行大规模重写。尽管大量 EventPress 3 代码最终会出现在版本 4 中,但它不仅仅是复制粘贴。我觉得是时候最终摆脱自版本 1 以来一直存在的所有陈旧内容了;我想要一个更强大的测试套件;我想利用一些更新的技术。
我的计划是在解决这个问题时每月至少写一次东西。我会努力强迫自己坚持下去。
所以首先,投入战斗......
从哪里开始。
EventPress 4 将不会获得新的 UI。我们将使用版本 3 中的几乎所有界面,并且可能只是进行一些细微的更改。 EventPress 的 UI 是使用 Vue 3 和 Tailwind 构建的,而 Inertia 是我们选择的粘合剂。
EventPress 4 将是版本 3 的一对一功能副本。这意味着随着版本 3 在未来几个月内不断发展,版本 4 也需要随之发展。不过,目前还只是一些计划。
首先,我研究了版本 3 仍在努力的地方,并就如何在版本 4 中改进这些元素做了一些笔记。我已经建立了一个关于如何构建此版本的想法事件出版社。有一些熟悉的东西和一些全新的东西:
- Laravel 11
- Vue 3
- InertiaJS 2
- FrankenPHP 上的 Laravel Octane
- PHP 8.4
- MySQL(以及适用于企业客户端的 SQLSRV)
- 球童
我知道其中有一些有趣的选择。辛烷值对我们来说很重要,因为我们以前从未使用过类似的东西。 Octane 是 Laravel 的第一方包,可帮助您在 PHP 应用程序服务器上运行应用程序。支持 Swoole、RoadRunner 和 FrankenPHP。我们研究了所有三个选项,并暂时决定使用 FrankenPHP。它比其他两个更新,但提供了非常好的性能。 Swoole 提供了并发工作线程,这很好,但不是我们认为自己需要的。然而,问题在于它需要安装 Swoole 扩展。这不是我们期望企业客户做的事情。我也有一些使用 FrankenPHP 的经验,所以这是有道理的。
我们已经使用 Nginx 多年了。它太棒了,我强烈推荐它。然而,FrankenPHP 附带了它自己的 Caddy 服务器,因此我们也在对此进行试验。我们可能不会坚持使用 Caddy,但现在,它在列表中。
PHP 8.4 尚未发布,但由于 EventPress 4 暂时不会发布,因此我们开始使用最新版本是有意义的。截至撰写本文时,PHP 8.4 距离发布还有大约一个月的时间,因此我们正在使用最新的候选版本。
InertiaJS 2 的情况大致相同。它也处于测试阶段,但由于我们距离发布还有很长的路要走,它可能会在 EventPress 之前很久就发布。此外,我们在 BETA 版本中运行了 InertiaJS 1 很长时间,没有出现任何问题。
静态分析
我是最近的静态分析转换者。我用得最多的是 PHPStorm 为我提供的我编码的东西。对于 EventPress 4,我们决定全力以赴,将 PHPStan 纳入其中。 PHPStan 是 PHP 的第三方静态分析器。它的配置非常简单,并帮助我消除了许多其他项目中的一些错误。
基于 EventPress 的大小,这在这里也很有意义。为了完成这项工作,我添加了一个 test:types Composer 脚本,我可以随时运行该脚本,并将其添加到 CI 脚本中。
代码检查
我从未运行过 PHP 代码 linter。我使用过 PHP Mess Detector 几次,但从未真正投入其中。对于 EventPress 4,我们决定使用 linter 来帮助保持代码整洁和一致。我们选择了 Laravel 自己的“Pint”,它实际上只是 PHP-CS-Fixer 的包装器,并提供了一种非常简单的方法来保持代码整洁。再次,我添加了 lint 和 test:lint Composer 脚本以使其更易于运行。
开发环境
在开发过程中我在 Mac 和 Linux 机器上工作。我的办公桌上有一台 M1 Max,已经用了好几年了,办公室里还散布着几台 Linux 机器。我的主要驱动程序是 Mac,我的大部分开发工作都是在 Mac 上进行的,但我的所有代码都在 Linux 机器上运行。通常是 Ubuntu 服务器。
EventPress 4 为这个难题添加了一些新的部分,但我认为在大多数情况下我可以继续按照目前的方式进行开发。我使用 Homebrew 安装大部分工具,使用 Laravel Valet 运行本地开发环境。我不是 Laravel Herd 用户(这很好,但我更像是 Herd Pro 用户,我无法证明每年花费 99 美元购买一个可以完成我已经可以做的所有事情的工具,只是速度更快一点,并且包含在一个漂亮的用户界面)。
所以我的计划是在我的本地计算机上运行一个使用 MySQL 数据库运行的 eventpress4.test 域。我将在早期开发过程中使用此状态一段时间,并每隔几天左右使用 Octane 进行一些测试。一旦我们完成了早期部分,我们将开始更频繁地使用 Octane 进行开发。我们将托管一个运行该应用程序的测试服务器,因为我们希望它在生产中运行。
集装箱
EventPress 从未被容器化。然而,EventPress 4 很可能会走这条路。我们仍在尝试一些事情,但我们已经与一些企业客户进行了交谈,我们认为这将有助于使他们的部署过程变得更加容易。我们在 Docker 容器中运行 EventPress 3 进行了一些早期测试,我们认为这对于未来所有 EventPress 版本来说都是正确的举措。
胃肠道
多年来,我们一直严重依赖 GitLab 作为我们选择的 CI/CD 服务。 GitLab 运行许多复杂的 CI 管道,并为我从事的几乎每个项目进行部署。
不过,我也已经是 GitHub 用户很多年了。我主要将它用于我的开源工作,但最近开始将一些较小的项目转移到付费 GitHub 帐户,这给我留下了深刻的印象。有一些事情与 GitLab 的工作方式非常不同,但在大多数方面我真的很高兴。
因此,EventPress 4 代码将托管在 GitHub 上,我们将使用 Actions for 或 CI 管道以及所有部署。
准备好了,出发吧!
我想这篇文章就到此为止了。仍有一些计划需要完成,但我已经开始编写一些代码并编写一些测试。我已经有了一个基本的身份验证层(感谢 Laravel),尽管其中大部分与 EventPress 3 类似。我将在下一个中展示一些代码。答应我!
以上是构建事件新闻第 1 部分的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

会话劫持可以通过以下步骤实现:1.获取会话ID,2.使用会话ID,3.保持会话活跃。在PHP中防范会话劫持的方法包括:1.使用session_regenerate_id()函数重新生成会话ID,2.通过数据库存储会话数据,3.确保所有会话数据通过HTTPS传输。

PHP中有四种主要错误类型:1.Notice:最轻微,不会中断程序,如访问未定义变量;2.Warning:比Notice严重,不会终止程序,如包含不存在文件;3.FatalError:最严重,会终止程序,如调用不存在函数;4.ParseError:语法错误,会阻止程序执行,如忘记添加结束标签。

PHP和Python各有优势,选择依据项目需求。1.PHP适合web开发,尤其快速开发和维护网站。2.Python适用于数据科学、机器学习和人工智能,语法简洁,适合初学者。

HTTP请求方法包括GET、POST、PUT和DELETE,分别用于获取、提交、更新和删除资源。1.GET方法用于获取资源,适用于读取操作。2.POST方法用于提交数据,常用于创建新资源。3.PUT方法用于更新资源,适用于完整更新。4.DELETE方法用于删除资源,适用于删除操作。

在PHP中,应使用password_hash和password_verify函数实现安全的密码哈希处理,不应使用MD5或SHA1。1)password_hash生成包含盐值的哈希,增强安全性。2)password_verify验证密码,通过比较哈希值确保安全。3)MD5和SHA1易受攻击且缺乏盐值,不适合现代密码安全。

PHP是一种广泛应用于服务器端的脚本语言,特别适合web开发。1.PHP可以嵌入HTML,处理HTTP请求和响应,支持多种数据库。2.PHP用于生成动态网页内容,处理表单数据,访问数据库等,具有强大的社区支持和开源资源。3.PHP是解释型语言,执行过程包括词法分析、语法分析、编译和执行。4.PHP可以与MySQL结合用于用户注册系统等高级应用。5.调试PHP时,可使用error_reporting()和var_dump()等函数。6.优化PHP代码可通过缓存机制、优化数据库查询和使用内置函数。7

箭头函数在PHP7.4中引入,是短闭包的简化形式。1)它们使用=>运算符定义,省略function和use关键字。2)箭头函数自动捕获当前作用域变量,无需use关键字。3)它们常用于回调函数和短小计算,提高代码简洁性和可读性。

PHP在电子商务、内容管理系统和API开发中广泛应用。1)电子商务:用于购物车功能和支付处理。2)内容管理系统:用于动态内容生成和用户管理。3)API开发:用于RESTfulAPI开发和API安全性。通过性能优化和最佳实践,PHP应用的效率和可维护性得以提升。
