gpt4 book ai didi

symfony - 在 Symfony2 中封装功能的模块化架构

转载 作者:行者123 更新时间:2023-12-04 02:17:30 26 4
gpt4 key购买 nike

我想开发什么....

我目前正在开发一个 SaaS 解决方案 (Symfony2) 来构建 HTML 演示文稿或更好的幻灯片放映。用户可以登录到管理 UI 并创建演示文稿。此演示文稿可以稍后播放。演示文稿由元素组成。元素可以是图片、文本、视频、pdf等。

enter image description here

此元素类型应从用户界面中封装。因此,外部开发人员可以开发具有已定义接口(interface)的此类新模块(元素类型)并将其注入(inject)系统。

如果一个新模块完成,我们将它移动到 symfony2 目录中的特定目录,系统检测到新模块。 无需对管理 ui 系统进行硬编码更改

每个模块都有自己的“产品编号”。所以我们可以使用数据库为不同的用户启用或禁用模块。

模块必须实现哪些功能?

在管理用户界面中,用户可以创建演示文稿并添加不同类型的元素(模块)。用户看到带有元素的时间线。当他点击一个元素时,该元素的编辑器将显示在时间线(Parent-Child-View)下。每个模块都有不同的编辑器。文本模块需要与图像模块不同的其他配置可能性。

因此,在管理 UI 中,我们需要函数来编辑元素:

  • createNewElement() 在数据库中创建新条目(模块有自己的表,例如 mod_text_elements)
  • renderEditorView() 生成 HTML,该 HTML 将显示在管理 ui 中,带有特定于模块的输入。例如。图片上传/裁剪,所见即所得编辑器,...
  • saveEditorInputs()该模块需要处理编辑器中输入的数据,并将其保存到数据库中的元素条目中
  • deleteElement() 删除一个元素

演示文稿的输出:

稍后我们要播放这个演示文稿。因此,一个循环遍历表示元素并询问元素的模块显示什么以及如何显示它。

  • renderPresentation() 呈现 (HTML) 演示文稿的元素

数据库

我已经制作了一个可能的解决方案的 er-diagram,用于将有关模块和元素的信息保存在数据库中。黄色实体是特定于模块的表。

ER-model

如何在Symfony2中实现这一点?

我的第一个想法是定义一个必须由模块实现的接口(interface)。但是哪个类必须实现这个? Controller ?

模块= bundle 吗?

如何实现编辑器的View-in-View?模块的编辑器(例如 renderEditorView())应该在管理 ui 的用户界面中查看。

最佳答案

我会通过连接到 EventDispatcher Component 来做到这一点.

您的“主” Controller 将定义一组事件,这些事件对应于您在上面定义的标准 CRUD 操作 ... onCreateNewElement()、onRenderEditorView() 等。您可能会发现更多的事件来提供 Hook 在您构建应用程序时(例如,允许插件将工具添加到工具栏)。

你会定义一个 Service (这不一定是 Controller 类),它会寻找新的“模块”并将其正确命名的方法添加为自定义应用程序事件的监听器。

模块是否 = bundle ? 那么,这完全取决于您。您是否打算为用户提供一种专门为您的应用程序“安装”新模块的方法?那么一个模块需要什么样子就完全由你决定了。您是否打算将 Composer 混入其中并允许以这种方式安装模块?对结构施加了一些限制,但仍然完全取决于您。

如何实现 View 中 View ?同样,这归结为您如何定义“事件插件”的接口(interface)以及它们对资源(如 TWIG 和YAML 配置。

您真正要问的问题是如何在不修改现有代码的情况下向应用程序添加功能 ... 答案是EventDispatcher。剩下的就看你了。

关于symfony - 在 Symfony2 中封装功能的模块化架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33053369/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com