neos / contentrepository-development-collection
事件源内容库Neos包在一个联合仓库中,以便更容易开发。
Requires
Requires (Dev)
- dg/bypass-finals: ^1.2
- mikey179/vfsstream: ^1.6
- neos/behat: dev-master
- neos/buildessentials: ^7.0
- phpstan/phpstan: ^1.4
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.6
- symfony/css-selector: ^2.0
Conflicts
Replaces
- neos/contentgraph-doctrinedbaladapter: dev-master
- neos/contentgraph-postgresqladapter: dev-master
- neos/contentrepository-behavioraltests: dev-master
- neos/event-sourced-content-repository: dev-master
- neos/event-sourced-neos-adjustments: dev-master
- neos/eventsourcedcontentrepository-legacyapi: dev-master
- neos/eventsourcedcontentrepository-security: dev-master
- dev-master
- dev-nodeRemoval
- dev-nodeDisabling
- dev-feature/65-import-export
- dev-nodeReferencing
- dev-nodeModification
- dev-cypher
- dev-flyweights
- dev-dimensionspace2
- dev-feature/204-nodeSearchService-implementation
- dev-fix-cache-flushing
- dev-docsneosio-core-fixes
- dev-feature/180-postgresGraph
- dev-feature/180-postgresGraph-merged
- dev-node-accessor
- dev-feature/178-routing-simplify-dimension-and-site-resolution
- dev-feature/179-nodeCoverage
- dev-feature/160/traversableNodeAsExtensionPoint
- dev-feature/183-prevent-legacy-node-instantiation
- dev-analysis-BM5g1m
- dev-feature/propertyScopes
- dev-redisgraph
- dev-improve-cache-hit-rate
- dev-feature/history
- dev-draft-standalone-cr
- dev-100-introduce-commandBus
- dev-experiment-speed-up
This package is auto-updated.
Last update: 2022-06-03 12:52:35 UTC
README
这是一个您可以与普通Neos一起安装的包捆绑,以便在事件源CR上进行实验。
功能比较
✅ 完成
⏩ 当前正在工作
🚫 不会得到支持
功能 | 当前CR | 事件源CR |
---|---|---|
基本功能 | ||
创建/编辑/删除节点 | ✅ | ✅ |
快捷键处理 | ✅ | ✅ |
查询节点 | ✅ | ✅ |
剪切/复制/粘贴 | ✅ | ✅ |
移动节点 | ✅ | ✅ |
隐藏节点 | ✅ | ✅ |
历史记录 | (✅) | |
基本工作区 | ✅ | ✅ |
工作区模块 | ✅ | ✅ |
嵌套工作区 | ✅ | |
撤销/重做 | 🚫 | |
设置开始/结束时间 | ✅ | |
解决引用节点 | 🚫 | ✅ |
菜单渲染 | ✅ | ✅ |
维度菜单渲染 | ✅ | ✅ |
支持“不在菜单中” | ✅ | ✅ |
更改节点类型 | ✅ | ✅ |
高级功能 | ||
维度 | ✅ | ✅ |
维度回退 | ✅ | ✅ |
多个站点 | ✅ | ✅ |
权限/策略 | ✅ | |
维护 | ||
导出/导入 | ✅ | ✅⏩ |
节点迁移 | ✅ | ✅ |
结构调整(即节点:修复) | ✅ | ✅ |
完整性检查 | 🚫 | ✅ |
API | ||
独立的读/写API | 🚫 | ✅ |
更方便的写API | ||
可扩展的读API | (✅)自定义节点 | ✅ NodeAccessors |
FlowQuery兼容 | ✅ | ✅ |
高级测试用例 | 🚫 | ✅ |
不使用ORM,而是直接SQL查询 | 🚫 | ✅ |
异步操作可行 | 🚫 | ✅ |
高效节点移动 | 🚫 | ✅ |
高效节点删除 | 🚫 | ✅ |
近恒定的读性能 | 🚫 | ✅ |
高效的URL生成(路由) | 🚫 | ✅ |
MySQL支持 | ✅ | ✅ |
Postgres支持 | ✅ | ⏩(性能更高) |
不使用Neos/Flow的使用 | 🚫 | 准备好的 |
可扩展属性序列化 | 🚫 | ✅ 通过Symfony Serializer |
双向遍历节点引用 | 🚫 | ✅ |
内容合并冲突检测 | 🚫 | ✅ |
内容合并冲突解决 | 🚫 | ⏩ |
用户界面 | ||
确保在UI中可以发布节点删除 | ✅ | ✅ |
支持维度约束 | ✅ | |
发布工作区 | ✅ | ✅ |
发布当前页面 | ✅ | ✅ |
丢弃所有 | ✅ | ✅ |
丢弃当前页面 | ✅ | ✅ |
在UI中更改节点类型 | ✅ | ✅ |
包兼容性
- Flowpack.NodeTemplates 目前不支持,因为它与状态化的Node对象紧密相关。原则上,可以通过提供一个“Node”shim对象,基于ES CR构建一个API兼容版本。
要求
数据库
事件源内容库依赖于一个名为(递归)公用表表达式(CTE)的功能,该功能需要
稍后,我们还将支持PostgreSQL。 (我们知道它会工作,但我们还没有创建迁移或进行测试)。
PHP
新代码应与PHP 7.4兼容
入门/安装
请参阅https://github.com/neos/neos-development-distribution/tree/event-sourced
代码检查
代码检查是通过CodeSniffer和PHPStan完成的。这两个都作为composer脚本来集成(见composer.json)。在提交PR之前,您可以通过运行以下命令手动检查您的分支(位于存储库所在的文件夹中,可能是Neos发行版中的Packages/CR
)
composer lint
从集合所在的文件夹运行(在Neos发行版中可能是Packages/CR
)
提交钩子
如果需要,可以将代码检查添加到提交钩子。在集合文件夹中(在Neos发行版中可能是Packages/CR
),将类似以下行添加到您的.git/hooks/pre-commit
文件中(以下示例适用于DDEV环境)
#!/bin/sh ddev exec "cd Packages/CR; composer lint"
走向第一个beta版本
- 创建独立包集合而不是分支
- 从NodeData导入到事件的命令
- 使其与Neos.ContentRepository.DimensionSpace包兼容
- 确保行为测试再次运行
- 更新CR以支持Neos 5
- 更新EventSourcedNeosAdjustments以支持Neos 5
- 内容缓存(#103)
- 确保功能测试再次运行
- 弄清楚如何以及是否使用基于事件源的Site/Domain(可能很困难)->已修复;不会使用基于事件源的site/domain
- 在事件源模式下更改RoutePart处理器
- 在事件源模式下调整NodeController
- 添加切换以在Fusion渲染中使用事件源读取模型(可能由于方法签名而困难)
- 允许根据事件源读取模型打开用户界面
- 实现节点的显示/隐藏(递归)
- 根据UI交互创建命令
- SetProperty命令
- CreateNode
- MoveNode
- ShowNode
- DisableNode
- 在本README中创建功能列表,详细说明支持的内容和尚未支持的内容。
- 支持URL中的空内容维度值;例如,德语为"/de/...",英语为"/..."
- 为内容集合提供绝对节点引用(例如,演示站点中的共享页脚)
- 修复策略处理以配置各种UI部分的权限
- 修复结构树
- 重新加载后显示正确的工作区状态(顶部发布按钮)
- [?] 修复内联链接
- 修复节点树搜索
- [?] 修复节点树筛选
- 实现节点修复
- (此处还有其他待办事项;此列表尚不完整)
Postgres适配器开发
默认情况下,当前激活的是Mysql适配器,因为Postgres仍在开发中。
要激活Postgres,目前需要执行以下步骤在您的发行版中
# Configuration/Objects.yaml Neos\EventSourcedContentRepository\Domain\Projection\Content\ContentGraphInterface: className: 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Repository\ContentHypergraph'
如果您想同时运行Postgres和MySQL进行测试,您需要以下配置
# Configuration/Settings.yaml Neos: EventSourcedContentRepository: unstableInternalWillChangeLater: testing: projectorsToBeReset: 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Projection\HypergraphProjector': true activeContentGraphs: 'Postgres': 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Repository\ContentHypergraph' projection: defaultProjectorsToBeBlocked: 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Projection\HypergraphProjector': true
如果您想在没有MySQL的情况下运行Postgres,您需要以下配置
# Configuration/Settings.yaml Neos: EventSourcedContentRepository: unstableInternalWillChangeLater: testing: projectorsToBeReset: 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Projection\HypergraphProjector': true 'Neos\ContentGraph\DoctrineDbalAdapter\Domain\Projection\GraphProjector': false activeContentGraphs: 'Postgres': 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Repository\ContentHypergraph' 'DoctrineDBAL': false projection: defaultProjectorsToBeBlocked: 'Neos\ContentGraph\PostgreSQLAdapter\Domain\Projection\HypergraphProjector': true 'Neos\ContentGraph\DoctrineDbalAdapter\Domain\Projection\GraphProjector': false
技术说明(针对开发者)
本节应提供不同涉及的包的概述,以帮助理解不同的组成部分。
Neos.ContentRepository
参见neos/neos-development-collection#2202以获取拉取请求。
- 在命名空间
Domain\Projection\Content
中,定义了新的NodeInterface
和TraversableNodeInterface
。 - 在命名空间
Domain\ValueObject
中,定义了相应的值对象。 - 旧的
Neos\ContentRepository\Domain\Model\Node
实现了完整的新NodeInterface
和大部分TraversableNodeInterface
。这是必需的,以确保我们可以构建同时与旧的和新的API一起工作的FlowQuery实现。 - 调整了FlowQuery操作以符合
TraversableNodeInterface
(待办事项:尚未全部完成)
Neos.Neos
参见neos/neos-development-collection#2202以获取拉取请求。
- 对核心部分进行了各种细节改进,以使用
TraversableNodeInterface
(例如FusionView)
Neos.ContentRepository.DimensionSpace
查询配置维度空间的API
CR / Neos.EventSourcedContentRepository
实现事件源CR核心的过渡包。从长远来看,可能会合并到Neos.ContentRepository中。
Domain\Context\*
实现了工作空间、内容流、节点的命令、命令处理程序和事件Domain\Projection\*
实现了变化投影、工作空间列表;并包含主要Content
图投影的定义(ContentGraphInterface
和ContentSubgraphInterface
)
CR / Neos.ContentGraph.DoctrineDbalAdapter
使用MySQL查询实现ContentGraphInterface
和ContentSubgraphInterface
的实例
CR / Neos.ContentGraph.PostgreSQLAdapter
使用PostgreSQL查询实现ContentGraphInterface
和ContentSubgraphInterface
的实例
CR / Neos.EventSourcedNeosAdjustments
结果表明,需要对Neos.Neos的详细信息进行大量更改,因此该包会钩入Neos生命周期中的多个位置以覆盖某些Neos功能。
我们经常完全覆盖Neos核心中的某些类/行为;因此,在未来某个时候将更改合并回Neos.Neos包将容易得多,因为那时我们可以替换完整的类而不是仅替换单个部分。
该包由以下边界上下文组成,按请求处理顺序列出
NodeImportFromLegacyCR
该包包含一个CommandController和一个服务,用于从读取NodeData
生成事件。它可以使用新的CLI命令激活。
EventSourcedRouting
我们通过提供FrontendNodeRoutePartHandlerInterface
的额外实现来替换默认的FrontendNodeRoutePartHandler
。
激活:我们在Objects.yaml
中替换了FrontendNodeRoutePartHandlerInterface
的实现。
- 内部,使用
Http
和Routing
命名空间来处理路由内部的行为。
EventSourcedFrontController
这是 Neos.Neos 中的 Frontend\NodeController
的替代品。
激活:我们通过 AOP(在 NodeControllerAspect
中)触发此控制器:当 Neos 控制器调用 processRequest()
时,我们调用新的控制器。
Fusion
-
我们替换了某些 Fusion 实现,这些实现已被重写以更有效地与 ContentGraph API 一起工作,并且实现了链接(因为该 API 也已更改)。这包括:
菜单 / 维度菜单
NodeUri, ConvertUris
ContentElementEditable / ContentElementWrapping
(因为 ContentElementWrapping 服务已经变化很大)- 激活:使用
Settings.yaml
中的 fusionautoInclude
,我们加载 Fusion 文件resource://Neos.EventSourcedNeosAdjustments/Private/Fusion/Root.fusion
。此Root.fusion
替换了上述 Fusion 对象的实现,因此集成者(无需新命名空间)可以按预期工作。
-
Eel
NodeHelper
和WorkspaceHelper
- 激活:这些助手以
Neos.EventSourcedNeosAdjustments.*
的名称注册;因此有一个单独的名称。这些助手在上述几行中提到的Root.fusion
中明确使用。
- 激活:这些助手以
-
自定义
ExceptionHandler
,因为这也需要替换ContentElementWrappingService
。- 激活:此助手在上述几行中提到的
Root.fusion
中用作异常处理程序。 - 如果人们自己使用了这些异常处理程序,则需要重新配置它们以使用新的实现。
- 激活:此助手在上述几行中提到的
Fluid
- 我们替换了链接和内容元素包装视图助手,因为节点链接已更改,内容元素包装也发生了变化。
- 激活:使用 AOP,
ViewHelperReplacementAspect
实现了视图助手类的别名;有效地返回此命名空间中的 VH 而不是默认的 VH。
- 激活:使用 AOP,
ContentElementWrapping
我们实现了全新的 ContentElementWrappingService
和 ContentElementWrappingService
;主要是因为它们变化很大,并且它们的接口现在需要 TraversableNodeInterface
而不是旧的 NodeInterface
。
新服务用于覆盖的视图助手(见上述 Fluid 部分);以及在覆盖的 Fusion 实现中(见上述 Fusion 部分)。
NodeAddress (Domain\Context\Content)
NodeAddress
是节点的外部表示(用于路由)。待办事项:将其移动到 Neos.EventSourcedContentRepository。
Ui
BackendController
是 Neos.Neos.UiBackendController
的替代实现。- 激活:我们通过 AOP(在
BackendControllerAspect
中)触发此控制器:当 Neos 后端控制器调用processRequest()
时,我们调用新的控制器。
- 激活:我们通过 AOP(在
- 我们在后端登录时使用
EditorContentStreamZookeeper
创建内容流(待办事项:可能更改名称?)。- 激活:我们通过
Package.php
中的信号/槽触发此服务。
- 激活:我们通过
Fusion
(后端)- 激活:我们使用
Views.yaml
加载自定义的resource://Neos.EventSourcedNeosAdjustments/Private/Fusion/Backend/Root.fusion
。 - 自定义
NodeInfoHelper
,调用自定义的NodePropertyConverterService
- 激活:我们使用
- 调整
Resources/Private/UiAdapter
中的 DimensionSwitcher JS 组件 - 待办事项:这还不是全部。