我来自不同的MVC框架(例如Symfony)到Magento。我读了很多关于Magento的最佳实践,我可以看到Magento不使用典型的MVC风格。艾伦风暴写下如下:Magento - 最好的方式来处理块的形式?
它不是控制器设置为 视图变量的责任[...]控制器的工作是做某些事情,以模型和 然后告诉它的系统布局呈现时间。
我想我理解这种方法,因为这可以为块提供一种灵活性。
对。但是形式呢?
在典型的MVC框架中,您将获得控制器中的请求参数,验证控制器中的表单数据,在必要时进行模型操作(保存,加载等)或重定向,并且当一切都干净整齐时,您将为视图提供新鲜出炉的输出件。
在Magento这些都应该发生的块内和(薄)控制器只应该准备的布局,然后解析它。 (如果我明白了)。
我试图找到一篇文章(手册,论坛主题,任何内容),它描述了一个独立模块的创建步骤和一个自己的新模型,可以通过前端的表单进行编辑由用户。我想看看自定义表单应该如何在前端工作。我只找到关于块,表单,修改或创建adminhtml表单或定制联系人或通讯注册表单的一般性文章。
我做到了。它现在有效,但我不满意。于是,我检查了核心模块中联系人表单的源代码,以及那些让我搞乱了整个图片的东西。内置的Contact表单使用IndexController来处理上面提到的大部分操作,(几乎)就像一个标准的MVC。
可能有人建议我最好的做法,如何管理一个简单的流程类似下面的? (我已经得到了这些下面的解决方案,但我不知道,是“正确的Magento办法”):
- 页面加载,显示块的形式,它包括在
- 单独页面
- 负载从DB模型对象由一个请求参数
- 填充对象数据到表单当用户提交表单,处理表单数据,验证它们
- 如果验证错误时,显示再次形成,并弹出错误消息
- I ˚FOK,将数据存储到数据库,显示感谢您网页
我的困惑主要是围绕:
- 我应该在哪里获取和管理请求参数? (我在块类文件中做过)
- 并基于它从数据库中加载一个对象? (另外,然后传递给phtml)
- 如何将它传递给视图,如果我不加载它呢? (我会知道一种方式,但我不知道最好的方法。)
- 哪里应该(POST)表单数据处理,验证和存储? (Block?)
- 如何在块中正确使用重定向?我是否需要重定向,因为感谢页面应该是不同的块/页面?或者只是一个替代(有条件)的相同块的外观?
谢谢Slayer,这就是我所怀疑的。这似乎更有意义!我同意你上面的所有论点。基于我的MVC知识,我假设了一些类似的东西。我会检查这些核心代码。非常感激! –