【发布时间】:2015-10-10 11:15:41
【问题描述】:
我想开发什么......
我目前正在开发一个 SaaS 解决方案 (Symfony2) 来构建 HTML 演示文稿或更好的幻灯片放映。用户可以登录到管理 UI 并创建演示文稿。此演示文稿可以稍后播放。演示文稿由元素组成。元素可以是图片、文本、视频、pdf等。
应该从用户界面封装这些元素类型。所以extern开发者可以开发这样的新模块(元素类型),定义接口并注入到系统中。
如果一个新模块完成,我们将它移动到 symfony2 目录中的特定目录,系统会检测到新模块。 无需对管理 UI 系统进行硬编码更改。
每个模块都有自己的“产品编号”。所以我们可以使用数据库来为不同的用户启用或禁用模块。
模块必须实现哪些功能?
在管理用户界面中,用户可以创建演示文稿并添加不同类型的元素(模块)。用户会看到包含元素的时间线。当他单击一个元素时,该元素的编辑器将显示在时间轴下方(父子视图)。每个模块都有不同的编辑器。文本模块需要其他配置可能性而不是图像模块。
因此,在管理 UI 中,我们需要编辑元素的函数:
- createNewElement() 在数据库中创建新条目(模块有自己的表,例如 mod_text_elements)
- renderEditorView() 生成 HTML,该 HTML 将显示在管理 UI 中,并带有特定于模块的输入。例如。图片上传/裁剪、所见即所得编辑器、...
- saveEditorInputs()模块需要处理编辑器中输入的数据,并将其保存到数据库中的元素条目中
- deleteElement() 删除一个元素
演示文稿的输出:
稍后我们要播放此演示文稿。因此,一个循环会遍历表示元素,并询问元素的模块是什么以及如何显示它。
- renderPresentation() 为演示文稿呈现 (HTML) 元素
数据库
我制作了一个可能的解决方案的小图表,用于将有关模块和元素的信息保存在数据库中。黄色实体是特定于模块的表。
如何在 Symfony2 中实现这一点?
我的第一个想法是定义一个必须由模块实现的接口。但是哪个类必须实现这个?控制器?
模块 = 捆绑包吗?
如何实现编辑器的View-in-View?应该在管理 ui 的用户界面中查看模块的编辑器(例如 renderEditorView())。
【问题讨论】:
-
您是对所有插件使用
mod_text_element和mode_image_element,还是每个插件都有自己的表格? -
每个插件/模块都有自己的表。模块只使用自己的表来保存元素的信息。例如:mod_image_element、mod_image_files、mod_image_....图像模块...
标签: symfony architecture saas