2011-01-13 61 views
1

我想对我的建筑有一些反馈。我的Zend Framework项目包含几个模块和我们构建页面的模块。它与默认的ZF应用程序略有不同,因为多个模块可以创建一个页面。例如,联系页面由零件文本(文本模块)和联系表单(联系模块)组成。或者三列页面有三个文本模块在一页上运行。到目前为止这么好(这一切都很好)。ZF的建筑咨询admin

管理员界面

现在,我们的管理员。在管理界面中,我们编辑一个页面(而不是一个模块!),这使得它很难。一个页面可以有一个或多个Zend_Form实例。例如,一个文本可以用textarea编辑,一个联系表格形成一些输入字段。这些需要作为更大的Zend_Form实例的子表单显示在视图中。还需要显示html(查看脚本),例如列出博客文章或投资组合中的项目。并非所有的模块都是“可管理的”(例如我们的站点地图,没有什么可配置的),但是那些需要支持创建,更新和删除的模块。

当前架构

我们的服务现在的工作。很容易检查(存在类Portfolio_Service_Admin并执行Admin_Service_AdminInterface?)。但是一个投资组合已经变得很难实施:该服务扮演着一种控制器的角色,支持投资组合的创建,更新和删除,但也包括投资组合类别的CRUD和投资组合项目的CRUD(在一个类中!)。

如果这是不明确的,我可以添加更多的信息我们目前的做法

什么呢?

因为服务现在作为一个排序的控制器,I是控制器的思维(杜)。唯一的缺点是控制器需要返回表单将该模块表单添加为更大表单的子表单(而不是添加到响应!)。此外,一个页面上的多个模块导致dispatchloop的很多迭代,这不是非常有效。

所以:你有什么建议,如何控制呢?

+0

那么在你的管理区域,编辑一个页面的时候,Zend_Form有很多子表单提交到哪里?你有没有足够智能的页面控制器可以通过子窗体并将每个部分分配给相应的模块? – 2011-01-14 14:02:38

回答

0

我想现在回来。我们开始使用ZF2新的CMF(内容管理框架)应用程序,并解决了这个问题(尽管同时我们有另一种解决方案)。

页面和模块现在是1:1连接。这使得管理员变得更容易,因为它可以简单地将请求代理到适当的模块。这将作为开源发布,所以也许在不久的将来,我会通过链接到github评论这个答案。

1

我相信你混淆了MVC模块,并且你在呼唤“页面模块”的内容。这听起来像你需要一个模块和几个模型。

Pages_Model_Page有很多Pages_Model_Module。每个Pages_Model_Module都有一个窗体(Pages_Form_Module_ *)和getForm()方法来获取模块的表单。在getForm()中,可以创建“模块”窗体的新实例,并填充“模块”的数据。

每“页”,获得了“模块”,把每形式,作为一个子表单,在标准Zend_Form和再通过查看。提交后,重复以上建立表单,然后验证。如果有效,则循环遍历每个模块并应用更改。

有了这个方法,你必须为每个“页面模块”(文字,图片,表格,RSS,视频)的一种模式和形式,当你需要一个新的,你只需创建一个模型和形式。