【发布时间】:2012-11-28 13:55:31
【问题描述】:
我来自不同的 MVC 框架(例如 Symfony)到 Magento。我阅读了很多关于 Magento 最佳实践的信息,我可以看到 Magento 没有使用典型的 MVC 风格。 Alan Storm 写道:
控制器不负责为 view [...] 控制器的工作是对模型做某些事情,并且 然后告诉系统它的布局渲染时间。
我想我理解这种方法,因为它可以为块提供一种灵活性。
没错。但是表格呢?
在典型的 MVC 框架中,您将在控制器中获取请求参数,在控制器中验证表单数据,在必要时进行模型操作(保存、加载等)或重定向,当一切都干净整洁时,您将为视图提供新鲜出炉的输出片段。
在 Magento 中,这些都应该发生在一个块内,并且(瘦)控制器只应该准备布局然后渲染它。 (如果我明白的话。)
我试图找到一篇文章(手册,论坛主题,任何东西),它描述了具有自己的新模型的单独模块的创建步骤,用户可以通过前端的表单对其进行编辑。我想看看自定义表单应该如何在前端工作。我只找到关于块、表单、修改或创建 adminhtml 表单或自定义联系人或时事通讯注册表单的一般文章。
我做到了。它现在有效,但我不满意。然后,我检查了核心模块中的联系人表单的源代码,这些代码给我弄乱了整个画面。内置的联系人表单使用 IndexController 来完成上述大部分操作,(几乎)像标准 MVC 一样。
谁能向我建议一个最佳实践,如何管理如下所示的简单流程? (我在下面有一个解决方案,但我不确定,这是“正确的 Magento 方式”):
- 页面加载时,在一个块中显示一个表单,该表单包含在单独的页面中
- 通过请求参数从数据库中加载模型对象
- 将对象数据填充到表单中
- 当用户提交表单时,处理表单数据,验证它们
- 如果验证错误,再次显示表单,并弹出错误信息
- 如果正常,将数据存储到数据库中,显示感谢页面
我的困惑主要在于:
- 我应该在哪里获取和管理请求参数? (我是在块类文件中做的)
- 然后从数据库中加载一个对象,基于它? (也是,然后传给phtml)
- 如果我不在那里加载它,如何将它传递给视图? (我会知道一种方法,但我不知道最好的方法。)
- 应该在哪里处理、验证和存储 (POST) 表单数据? (阻止?)
- 如何在块中正确使用重定向?我是否需要重定向,因为感谢页面应该是不同的块/页面?还是只是同一块的另一种(条件)外观?
【问题讨论】:
标签: forms model-view-controller magento controller block