首页 后端开发 php教程 构建事件新闻第 1 部分

构建事件新闻第 1 部分

Nov 19, 2024 pm 04:53 PM

嘿那里!在开始之前请注意...我已经很长时间没有写信了。多年来我一直威胁要这样做,最后我发现这是一个很好的话题。我有点生疏,但会努力坚持下去,希望能有所进步。

Building EventPress  Part 1

EventPress 可能是我所做的最重要的事情。我从一开始就参与其中,该应用程序在过去 10 年中经历了 3 个主要版本,呈指数级增长。版本 4 现已发布,在我们处理它的过程中我想更改一些更改。

首先,介绍一点历史。 EventPress 归 HotPress Media 所有,之所以成立是因为客户需要一个简单的解决方案来管理事件 RSVP,以取代他们的 Excel 电子表格。 EventPress 的第一个版本很丑陋。没有规范,我们在没有适当计划的情况下运行了该项目,最终得到了一大碗意大利面条。但它奏效了,并帮助我们踏入了南非最大的公司之一的大门。

版本 2 是一个巨大的飞跃。我们在接口方式上没有太大的改变,但是底层框架却发生了很大的变化。 EventPress 被迁移到 Laravel(当时的版本 5),尽管版本 1 中的很多代码都转移到了版本 2,但结构要好得多,我们遇到的问题也少得多。那时我们仍然没有任何类型的测试套件,我们基本上是在“它可以在我的机器上运行”的基础上进行测试。不太好。

Building EventPress  Part 1

版本 2 活动索引

版本 3 对 UI 进行了彻底修改,Tailwind 成为首选 CSS 框架。尽管仍然有相当多的版本 1 代码隐藏在黑暗的角落,但大量代码已被更改。第 3 版的一个重大变化是全新的分发系统。在此过渡期间,我们学到了很多有关发送群发邮件的知识。

许多面向公众的 UI 都是版本 2 的直接副本。即使现在,与会者看到的大部分内容仍然是版本 2 的代码。相反,版本 3 为代码库带来了更多的结构。某种逻辑开始出现。我们编写了瘦控制器并严重依赖服务容器。版本 3 也是 EventPress 第一个带有测试套件的版本。

Building EventPress  Part 1

版本 3 活动索引

我编写 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 类似。我将在下一个中展示一些代码。答应我!

Building EventPress  Part 1

早期版本4登录

以上是构建事件新闻第 1 部分的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

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

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1659
14
CakePHP 教程
1416
52
Laravel 教程
1310
25
PHP教程
1258
29
C# 教程
1232
24
会话如何劫持工作,如何在PHP中减轻它? 会话如何劫持工作,如何在PHP中减轻它? Apr 06, 2025 am 12:02 AM

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

说明PHP中的不同错误类型(注意,警告,致命错误,解析错误)。 说明PHP中的不同错误类型(注意,警告,致命错误,解析错误)。 Apr 08, 2025 am 12:03 AM

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

PHP和Python:比较两种流行的编程语言 PHP和Python:比较两种流行的编程语言 Apr 14, 2025 am 12:13 AM

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

什么是HTTP请求方法(获取,发布,放置,删除等),何时应该使用? 什么是HTTP请求方法(获取,发布,放置,删除等),何时应该使用? Apr 09, 2025 am 12:09 AM

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

说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? 说明PHP中的安全密码散列(例如,password_hash,password_verify)。为什么不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

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

PHP:网络开发的关键语言 PHP:网络开发的关键语言 Apr 13, 2025 am 12:08 AM

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

解释PHP 7.4中引入的箭头功能(短闭合)。 解释PHP 7.4中引入的箭头功能(短闭合)。 Apr 06, 2025 am 12:01 AM

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

PHP行动:现实世界中的示例和应用程序 PHP行动:现实世界中的示例和应用程序 Apr 14, 2025 am 12:19 AM

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

See all articles