samuelgfeller / slim-example-project
使用 slim 微型框架的示例项目
Requires
- php: ^8.2
- ext-gettext: *
- ext-intl: *
- ext-json: *
- ext-pdo: *
- cakephp/database: ^5
- cakephp/validation: ^5.0
- fig/http-message-util: ^1
- monolog/monolog: ^3
- nyholm/psr7: ^1
- nyholm/psr7-server: ^1
- odan/session: ^6
- php-di/php-di: ^7.0
- samuelgfeller/slim-error-renderer: ^1.0
- selective/basepath: ^2.0
- slim/php-view: ^3.0
- slim/slim: ^4
- symfony/mailer: ^7
Requires (Dev)
This package is auto-updated.
Last update: 2024-09-25 11:37:32 UTC
README
这是一个现代 Slim 4 网络应用的现实世界示例,具有可扩展的结构和多种组件和功能。
该项目采用当前的最佳实践和编程原则,特别强调单一职责原则 (SRP)。
外部库依赖最小化,以简化维护并确保长期可行性 (更多信息)。
架构灵感来源于领域驱动设计 (DDD) 和垂直切片架构 (更多信息)。
该项目的基础是官方的 Slim-Skeleton 和 slim4-skeleton。
详细 文档 解释了如何构建项目、组件、设计选择和功能。
此存储库的简化版本可用作骨架模板。与前端 slim-starter 或仅用于 API: slim-api-starter。
请阅读 安装指南 以开始使用。
功能
所有功能都经过精心设计,以确保最大程度的用户友好性。前端直观、美观、简约、功能性强。后端高效且安全。
技术
- Slim 4 微型框架
- 依赖注入 - PHP-DI
- 日志记录 - Monolog
- 验证 - cakephp/validation
- 数据库迁移 - Phinx
- 模板渲染 - PHP-View
- 邮件发送 - Symfony Mailer
- 本地化 - gettext
- 查询构建器 - cakephp/database
- 集成/单元测试 - PHPUnit - test-traits
- 会话和闪存消息 - odan/session
- 错误处理 - slim-error-renderer
- GitHub Actions 和 Scrutinizer
- 编码标准修复器 - PHP-CS-Fixer
- 静态代码分析 - PHPStan
展示真实世界功能的特性
该项目目前是为需要平台来管理和维护他们帮助的人的通讯记录的非营利组织或基金会设计的。
- 身份验证(登录)
- 授权(权限)
- 账户验证和通过电子邮件链接和令牌重置密码
- 请求节流 - 防止暴力破解和密码喷洒攻击
- 管理员用户管理
- 4个用户角色和不同的权限
- 用户活动历史记录
- 创建和修改客户端,包括状态和属性用户
- 通过文本输入和过滤器芯片过滤客户端列表
- 创建和修改笔记
- 隐藏未授权用户的笔记
- 带有面板的仪表板
- 暗/亮主题
点击查看演示
链接: 登录
用户名: admin@user.com
密码: 12345678
数据库会定期重置。
创建这个项目的动机
互联网上有大量关于如何编写清洁和可持续代码的优秀内容。然而,当我想要学习如何在可能的真实世界应用中做事情时,我发现我需要的不仅仅是骨架项目或一般性的文档和教程。我从未找到过像开源、高效实现所有围绕完整项目功能的资源。
这就是我尝试在这里提供的内容。这个项目不仅仅是骨架,它包含了大量关于如何在真实世界应用中实现常见功能的具有见解的实用示例。
这包括授权、集成测试、本地化、验证、错误处理、数据库迁移、邮件、控制台命令、请求节流、轻量级PHP模板渲染、GitHub Actions等等,以及详细的文档说明。
但不仅限于此。同样重要的是架构以及组件之间如何交互,遵循现代原则,如单一责任原则和依赖注入。
当然,有一些大型框架拥有他们自己已建立的编程惯例和功能实现。
然而,我发现它们通常过于复杂,代码在幕后做了太多工作,并且有很多依赖关系,这可能导致版本变更时花费大量时间进行重构。
我也不喜欢遵循框架的专有规则这些规则通常不符合最佳实践,我更倾向于微框架的自由,以及为项目精心选择库和结构。
这使我能够控制代码库,保持其轻量级、高性能并针对项目需求定制,而且更容易维护和适应新的要求。
免责声明
本项目及其文档是我过去6年在尝试创建具有大量真实世界示例的最佳模板应用程序过程中个人学习成果的结晶。其中三年是全职投入这个项目。
这是我刚开始认真进行Web开发时希望拥有的。
代码库很大,因此必须做出许多主观的决定,这些决定可能不是对每个人都最佳的长期解决方案。
整个开发过程中的主要重点是使代码尽可能长久地生存,采用最佳实践和少量依赖关系,以便能够适应不同的需求和偏好。
基本上,这是我对今天技术下高效、可扩展和可维护的Web应用程序可能的样子的一些看法。
我与软件工程师和架构师Daniel Opitz紧密合作,他也审阅了本项目。在我们的交流中我学到了很多,并受到他的书籍、文章、教程和他简洁的骨架项目的启发。
支持
如果您重视此项目及其文档并希望支持它,请阅读支持❤️页面。
许可协议
本项目遵循MIT许可协议——有关详细信息,请参阅LICENSE文件。