abtercms/abterphp

基于Opulence框架的AbterCMS的PHP实现

安装: 1

依赖者: 0

建议者: 0

安全性: 0

星标: 0

关注者: 2

分支: 0

公开问题: 27

类型:项目

dev-main 2022-06-12 16:37 UTC

README

Build Status

AbterPHP是AbterCMS的第一个也是目前唯一一个实现,提供后端、前端和REST API。因为它使用jQuery而不是一些基于nodejs的解决方案,所以很多人可能会发现它更容易学习、维护或部署,不需要太多的JavaScript知识。

它基于优秀的Opulence框架。

为什么还需要另一个CMS?

系统存在的3个原因

  1. 为任何需要真正简单网站的人提供一个易于访问的替代方案。
  2. 教育目的。
  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 ServerNyholm/psr7作为PSR-7请求/响应库进行API的认证和授权。

如果您想要贡献代码,您也需要熟悉这些工具。

AbterPHP 当前仅支持 MySQL 作为数据库系统,尽管在第一个稳定版发布之前很可能支持 PostgreSQL。

路线图

第一个 alpha 必须项

  1. 使前端框架与后端系统解耦
  2. 使用 ILogger 而不是 Logger
  3. 更细粒度的授权
    • 为页面实现了 ACL
    • 为页面提供高级设置访问角色
    • 一个用户可以有多个用户组
    • 新用户角色:文件上传者、布局设计师、页面编写者
  4. 模块化资产管理
  5. 完成了测试自动化和自动审查的设置
  6. 重构了模块管理器
  7. 确保在 CLI 中创建用户时强制执行良好的密码
  8. 使用 Uuid ids
  9. 在 Select 构造函数中删除 $value
  10. 切换 $attribute$tag 的顺序
  11. 1 个好的网站模块
  12. 页面类别
  13. 重新添加通过执行器过滤导航项
  14. 修复网格
    • 过滤标签
    • 页面大小选择
    • 排序
    • 隐藏 IDs
  15. 在管理中分离网格和表单资产
  16. 为用户生成 API 密钥
  17. 修复表单
    • "红色" / "危险" 返回列表按钮
    • 创建和新的按钮
  18. 定义并发布了初始 API
  19. 存在文档页面
  20. 所有实现的 API 端点都返回格式正确的错误
  21. 可选地将文件内容嵌入 getFile API 端点
  22. 为开发禁用块缓存
  23. 按类别在前端列出页面(简单)
  24. 按类别在前端列出页面(详细)
  25. 升级到 phpunit 8.4
  26. 70%+ 的 PHP 源代码进行了单元测试,除了引导程序和命令行工具
  27. 在 OSX 上测试了项目
  28. 修复文件上传
  29. 文件类别标识符
  30. 文件类别公开/私有
  31. 页面结构名称
  32. 修复页面发布
  33. 显示登录错误
  34. 修复过滤器
  35. 已验证 localhost_router.php 正常工作,或如果难以修复则删除它
  36. API 与 Zalando REST API 建议进行了验证
  37. 在 Windows 10+ 上测试了项目

第一个 beta 必须项

  1. 审查了现有的 phpmd 忽略情况
  2. 通过 CLI 创建客户端
  3. 可选地嵌入渲染的页面主体参数
  4. 第 1 个好的网站模块
  5. 必须接受cookie模块
  6. 第 2 个好的网站模块
  7. 第 3 个好的网站模块
  8. 实现了 API
  9. 1 个网格通过验收测试(包括过滤器和分页)
  10. 1 个表单通过验收测试(包括显示新实体和现有实体以及保存)
  11. 突出显示带有验证错误的表单字段
  12. 审查了 12 因素合规性,并计划进行改进
  13. 审查并重构了全局 $abterModuleManager 使用
  14. 测试加载不存在或损坏的实体
  15. 修复了空的异常(\LogicException、\RuntimeException、\InvalidArgumentException)
  16. 确保标识符不包含逗号(explode 问题)
  17. 70%+ 的 JS 源代码进行了单元测试
  18. 启用 Generic.Commenting.DocComment phpcs 规则
  19. 改进验证
    • 审查验证工厂
    • 在需要的地方创建新的验证规则
  20. 缓存翻译
  21. 文档涵盖了入门和主要设计目标
  22. 修复侧边栏螺旋桨 "bug"
  23. 为用户缓存导航
  24. 从控制台启用/禁用模块
  25. 设置向导(管理员用户 + 安全设置)
  26. 吊销令牌端点
  27. 在处理 API 调用时进行范围检查
  28. RSS 源
  29. 页面默认图片
  30. 通过实施相关头信息来改进安全性
  31. 日志不一定是本地文件
  32. 页面应使用Layout作为实体 -> 修复getGridQuery::PageSqlDataMapper

1.0必须项

  1. API设计完成(社区反馈?)
  2. API测试完成
  3. 针对每个模块主要用例的验收测试
  4. 所有网格、分页、筛选均包含在验收测试中
  5. 所有表单的显示和保存以及适当的返回均包含在验收测试中
  6. 重构助手
  7. AbterPhp\Framework\Form\Factory\Base::getMultiSelectSize -> 移动到助手或Select
  8. 重构配置
  9. 重构引导程序(再次)
    • 使用Config Provider以删除引导程序
    • 框架中注册了验证器
  10. 所有常量已审查
  11. 文档“完整”
  12. 12因素合规性明确声明
  13. 更有用的仪表板(社区反馈?)
  14. 在mysql.conf中启用ONLY_FULL_GROUP_BY
  15. 重构
    • AbterPhp\Framework\Html\Collection
    • AbterPhp\Framework\Html\Helper\ArrayHelper::formatAttribute
    • 对象耦合超过15-20(待定)的类
    • AbterPhp\Framework\Module\Manager
  16. 适当的维护处理
  17. 考虑缓存处理过的模块数据

想法

1.0的想法

1.1的想法

  • 所见即所得文件选择器
  • 所见即所得图片上传
  • 用户图片上传
  • 清理HTML模板
  • 受保护的页面(只有登录用户可访问的页面)

长尾

  • Opulence授权(代替或叠加Casbin)