Php Symfony2表单组件-违反MVC和SRP?
我越是使用Symfony2并与它的形式斗争,我就越会得出结论,它们是一种巨大的可怕的野兽,甚至不应该真的存在 我看到这篇文章,发现我同意作者的观点。即使这篇文章是针对symfony1.x的,我认为它仍然适用于Symfony2中的表单组件。看起来表单组件确实试图在一个地方解决属于模板、控制器和模型的问题。这是否严重违反了MVC和/或SRP(单一责任原则) 这可能是一个不同的问题,但我觉得这有点相关-我还注意到symfony的许多可用捆绑包都试图解决视图之外的视图问题,例如: KnpMenuBundle—您可以在服务器端使用oo接口生成菜单(为什么不在它们所属的视图层中?) IvoryCKEditorBundle—将textarea转换为ckeditor是在视图文件中的一个jquery行中完成的,那么为什么存在这个捆绑包呢?我甚至不想数一数里面有多少行Php Symfony2表单组件-违反MVC和SRP?,php,model-view-controller,design-patterns,symfony,single-responsibility-principle,Php,Model View Controller,Design Patterns,Symfony,Single Responsibility Principle,我越是使用Symfony2并与它的形式斗争,我就越会得出结论,它们是一种巨大的可怕的野兽,甚至不应该真的存在 我看到这篇文章,发现我同意作者的观点。即使这篇文章是针对symfony1.x的,我认为它仍然适用于Symfony2中的表单组件。看起来表单组件确实试图在一个地方解决属于模板、控制器和模型的问题。这是否严重违反了MVC和/或SRP(单一责任原则) 这可能是一个不同的问题,但我觉得这有点相关-我还注意到symfony的许多可用捆绑包都试图解决视图之外的视图问题,例如: KnpMenuBund
因此,在Symfony的核心中似乎到处都有这些违规行为,或者我只是不明白?表单处理的问题是,它从定义上违反了MVC。这是一个被称为“横切”的问题,过去科学界对此进行过研究。例如,这篇论文是关于这个主题的有趣读物 例如,考虑表单与MVC不同层的关系: 型号:
- 表单复制域模型(DM)的信息结构。如果更改此结构(例如,通过向数据结构添加字段或向过程添加参数),还必须调整表单以输入该信息
- 他们需要您的DM提供类型信息,以便将输入转换为所需的类型
- 他们需要知道DM中指定的约束,以验证输入
- 理想情况下,它们直接从/向您的DM读取和写入数据(例如,通过读取/写入数据结构的字段,或通过调用DM中以提交的值作为参数的过程)
- 表单接收提交的数据并将其发送给DM
- 它们根据验证是否成功来改变程序流
- 表单呈现为HTML标记和属性的复杂结构,取决于上述所有内容(是否需要字段?是否显示错误?如何对字段排序?在下拉列表中提供哪些选项?等等)
2014年1月24日更新:对于任何想了解更多信息的人,以下是。这些是第三方工具。虽然Sf2中存在设计缺陷,但框架实际核心中的SRP冲突是最小的,并且只有当它是实用的解决方案时才适用。你所看到的并不是核心,我的意思是,似乎Symfony的核心思想中存在着某种东西,驱使人们编写这些疯狂的捆绑包。但是表单组件不是框架的核心组件吗?Zend框架中有这样的组件,但它非常糟糕。我得出的结论是,创建任何一种适合所有人的表单生成器都是徒劳的。您会在客户端生成菜单吗?请选择你的话。关注点的分离在KNPENU中维护,标记生成委托给视图层,而菜单层次结构委托给特定类。问题在哪里?我会回答你:用它来创建一个非常简单的3项菜单:)我指的是信息结构。如果您的域模型为“员工”建模,并且您有用于修改这些员工数据的表单,那么您很可能需要