abtercms / abterphp
基于Opulence框架的AbterCMS的PHP实现
Requires
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.18
- phan/phan: ^4.0
- phpmd/phpmd: ^2.9
- phpunit/phpunit: ^9.5
- squizlabs/php_codesniffer: ^3.5
Suggests
- ext-redis: Allows better caching
This package is not auto-updated.
Last update: 2024-10-03 07:05:35 UTC
README
AbterPHP是AbterCMS的第一个也是目前唯一一个实现,提供后端、前端和REST API。因为它使用jQuery而不是一些基于nodejs的解决方案,所以很多人可能会发现它更容易学习、维护或部署,不需要太多的JavaScript知识。
它基于优秀的Opulence框架。
为什么还需要另一个CMS?
系统存在的3个原因
- 为任何需要真正简单网站的人提供一个易于访问的替代方案。
- 教育目的。
- 为现在拥有PHP资源,但希望保持技术栈开放以适应变化的dev-shops提供一个合理坚固的基础。
您可以在网站上找到更多关于设计决策的信息。
AbterCMS
AbterCMS是一个多语言CMS系统,旨在为简单用例提供易于定制、维护和部署的网站解决方案,同时也是快速迭代想法的初创企业的坚实基石。
计划至少有一个Go API和一些基于nodejs的后端和前端解决方案。(可能是Elm、Vue或React。)
状态
AbterPHP的后端和前端功能几乎完成,但API尚未稳定、不完整且尚未进行适当的测试。代码覆盖率已经相当高,大约95%。文档处于非常初级的阶段。因此,当前状态为预alpha版。
安装
开发
先决条件:获取源代码
如果您正在阅读它,这应该是相当明显的,但请从GitHub下载代码或克隆存储库。只需使用“克隆或下载”按钮即可开始。
先决条件:安装docker
推荐的方式是用docker开始使用AbterPHP。虽然这不是强制性的,但某些文档可能假设所有开发人员都使用docker
进行开发。如果您想运行代码,您必须确保您有正确的PHP版本,必要的模块,并且至少有一个支持的MySQL(或更高版本)版本。虽然拥有Redis或Memcached很棒,但它们不是强制性的。
先决条件:安装mkcert
由于安全性是首要任务,因此纯http不支持,因此您需要安装一个证书。推荐的方式是使用mkcert
。虽然这不是强制性的,但某些文档可能假设所有开发人员都使用mkcert
进行开发。
先决条件:在控制台中打开项目
安装文档的其余部分将假设.
是项目的根目录。
先决条件:获取子模块
为了确保您可以使用docker作为开发平台,您应该确保拥有所有相关的配置。
git submodule update --init --recursive
稍后,要更新子模块,请使用以下git命令
git submodule update --remote
先决条件:在Linux和OSX的/etc/hosts
中或在Windows中的???
中将abtercms.test添加为localhost。
# /etc/hosts # [...] 127.0.0.1 abtercms.test
创建证书
由于安全性是首要任务,因此您需要创建一个证书并将其移动到docker/nginx/certs/
mkcert abtercms.test "*.abtercms.test" mv abtercms.test+1* ./docker/nginx/certs/
设置一些权限
chmod -R 0777 ./tmp ./public/tmp chmod +x apex
启动容器
docker-compose pull
docker-compose up -d
安装依赖项
为了安装依赖项,我们建议在PHP容器内部运行make
。
docker-compose exec cli make
确保您的设置合理。
虽然我们尝试提供一组合理的设置以快速开始,但在这一点上,您可能需要编辑config/environment/.env.app.php
以使设置满足您的需求。请注意,然而,这些值可能会被环境变量覆盖,在某些情况下将会被覆盖。这意味着如果您使用docker-compose
运行系统,那么您可能需要在docker-compose.yml
中编辑这些值。
如果您没有config/environment/.env.app.php
文件,那么在上一个步骤中肯定出了问题,因为它应该在php composer.phar install
期间创建。
有关设置的更多文档将稍后编写。
安装数据库模式并创建一个新的管理员用户
您需要登录到PHP容器(再次)运行迁移并创建用户。
注意: AbterPHP使用zxcvbn-php来验证密码强度。这是一个现代库,不强制使用数字和大小写字母的规则,也不简单计数字符。例如,ryvenglotbutnofasewordpass
是一个强密码,但verylongbutnotsafepassword
不是。(为了帮助从其他系统迁移用户,可以使用--unsafe
参数创建使用弱密码的用户。)
docker-compose exec php sh
> ./apex migrations:up
> ./apex user:create {username} {email} {strongPassword} admin en
> exit
如果一切顺利,您应该能够在https://abtercms.test/login-iddqd
处使用您的新用户登录,前提是您还没有更改config/environment/.env.app.php
中的ADMIN_LOGIN_PATH
环境变量。
生产环境
由于AbterPHP处于早期预览状态,您现在可能不应该将其部署到生产环境。
堆栈
AbterPHP基于Opulence,但除了Opulence之外,还使用了一些其他项目。
- 使用Monolog进行日志记录。
- 使用Whoops在非生产环境中进行错误报告。
- 使用Flysystem处理文件系统(未完整实现)。
- 使用Casbin进行授权。
- 使用Minify对资源进行压缩(网站模块)。
- 使用Swiftmailer发送电子邮件(联系模块)。
- 使用Slugify创建安全的Web标识符(管理模块)。
- 使用jQuery处理大部分JavaScript(管理模块)。
- 使用js-sha3进行浏览器端加密(管理模块)。
- 使用Trumbowyg作为所见即所得解决方案(管理模块)。
- 从Dropbox使用zxcvbn进行密码强度估计(管理模块)。
- 使用zxcvbn-php,这是
zxcvbn
的PHP版本(管理模块)。 - 使用OAuth 2.0 Server和Nyholm/psr7作为PSR-7请求/响应库进行API的认证和授权。
如果您想要贡献代码,您也需要熟悉这些工具。
- 使用PhpUnit进行单元测试。
- 使用vfsStream模拟文件系统。
- PHP_CodeSniffer 用于代码格式化
- PHPMD - PHP Mess Detector 用于代码质量
AbterPHP 当前仅支持 MySQL 作为数据库系统,尽管在第一个稳定版发布之前很可能支持 PostgreSQL。
路线图
第一个 alpha 必须项
使前端框架与后端系统解耦使用 ILogger 而不是 Logger更细粒度的授权为页面实现了 ACL为页面提供高级设置访问角色一个用户可以有多个用户组新用户角色:文件上传者、布局设计师、页面编写者
模块化资产管理完成了测试自动化和自动审查的设置重构了模块管理器确保在 CLI 中创建用户时强制执行良好的密码使用 Uuid ids在 Select 构造函数中删除 $value切换$attribute
和$tag
的顺序1 个好的网站模块页面类别重新添加通过执行器过滤导航项修复网格过滤标签页面大小选择排序隐藏 IDs
在管理中分离网格和表单资产为用户生成 API 密钥修复表单"红色" / "危险" 返回列表按钮创建和新的按钮
定义并发布了初始 API存在文档页面所有实现的 API 端点都返回格式正确的错误可选地将文件内容嵌入 getFile API 端点为开发禁用块缓存按类别在前端列出页面(简单)按类别在前端列出页面(详细)升级到 phpunit 8.470%+ 的 PHP 源代码进行了单元测试,除了引导程序和命令行工具在 OSX 上测试了项目修复文件上传文件类别标识符文件类别公开/私有页面结构名称修复页面发布显示登录错误- 修复过滤器
- 已验证
localhost_router.php
正常工作,或如果难以修复则删除它 - API 与 Zalando REST API 建议进行了验证
- 在 Windows 10+ 上测试了项目
第一个 beta 必须项
审查了现有的 phpmd 忽略情况通过 CLI 创建客户端可选地嵌入渲染的页面主体参数第 1 个好的网站模块- 必须接受cookie模块
- 第 2 个好的网站模块
- 第 3 个好的网站模块
- 实现了 API
- 1 个网格通过验收测试(包括过滤器和分页)
- 1 个表单通过验收测试(包括显示新实体和现有实体以及保存)
- 突出显示带有验证错误的表单字段
- 审查了 12 因素合规性,并计划进行改进
- 审查并重构了全局
$abterModuleManager
使用 - 测试加载不存在或损坏的实体
- 修复了空的异常(\LogicException、\RuntimeException、\InvalidArgumentException)
- 确保标识符不包含逗号(explode 问题)
- 70%+ 的 JS 源代码进行了单元测试
- 启用
Generic.Commenting.DocComment
phpcs 规则 - 改进验证
- 审查验证工厂
- 在需要的地方创建新的验证规则
- 缓存翻译
- 文档涵盖了入门和主要设计目标
- 修复侧边栏螺旋桨 "bug"
- 为用户缓存导航
- 从控制台启用/禁用模块
- 设置向导(管理员用户 + 安全设置)
- 吊销令牌端点
- 在处理 API 调用时进行范围检查
- RSS 源
- 页面默认图片
- 通过实施相关头信息来改进安全性
- 日志不一定是本地文件
- 页面应使用Layout作为实体 -> 修复getGridQuery::PageSqlDataMapper
1.0必须项
- API设计完成(社区反馈?)
- API测试完成
- 针对每个模块主要用例的验收测试
- 所有网格、分页、筛选均包含在验收测试中
- 所有表单的显示和保存以及适当的返回均包含在验收测试中
- 重构助手
- AbterPhp\Framework\Form\Factory\Base::getMultiSelectSize -> 移动到助手或Select
- 重构配置
- 重构引导程序(再次)
- 使用Config Provider以删除引导程序
- 框架中注册了验证器
- 所有常量已审查
- 文档“完整”
- 12因素合规性明确声明
- 更有用的仪表板(社区反馈?)
- 在mysql.conf中启用
ONLY_FULL_GROUP_BY
- 重构
AbterPhp\Framework\Html\Collection
AbterPhp\Framework\Html\Helper\ArrayHelper::formatAttribute
- 对象耦合超过15-20(待定)的类
AbterPhp\Framework\Module\Manager
- 适当的维护处理
- 考虑缓存处理过的模块数据
想法
1.0的想法
- 使用数据生成器进行烟熏测试
- PostgreSQL支持
- 忘记密码功能
- 2FA功能
- https://www.neonwiz.com/blog/two-factor-authentication-2fa-in-php/
- https://github.com/RobThree/TwoFactorAuth
- https://www.idontplaydarts.com/2011/07/google-totp-two-factor-authentication-for-php/
- https://medium.com/@richb_/easy-two-factor-authentication-2fa-with-google-authenticator-php-108388a1ea23
- https://medium.com/s/the-firewall/episode-3-multifactor-authentication-b25e9e1d2c18
- 无服务器支持
- 将S3用作文件系统?
- 保存联系详情的表单表
- 简单的博客模块
- 选择新的前端框架以实现后端系统并实施它
- 扩展Cell的动作
binary(16)
ids而不是char(36)
- 需要MySQL 8.0
BIN_TO_UUID
和UUID_TO_BIN
支持 - 需要查询构建器支持(尽管不是必需的)
- 需要MySQL 8.0
- 正确设置codeclimate.com
- 询问在点击“返回列表”按钮时是否丢弃更改
- 网格和表单按钮的图标
- 支持多页设置的网站实体
- 前端语言选择
1.1的想法
- 所见即所得文件选择器
- 所见即所得图片上传
- 用户图片上传
- 清理HTML模板
- 受保护的页面(只有登录用户可访问的页面)
长尾
- Opulence授权(代替或叠加Casbin)