【发布时间】:2010-11-30 21:15:55
【问题描述】:
如果从控制器提供视图,是否可以通过 post 传递在该视图中生成的数据并将其直接传递给模型,或者我是否需要返回为视图提供服务的控制器并从控制器调用模型?
【问题讨论】:
标签: model-view-controller codeigniter
如果从控制器提供视图,是否可以通过 post 传递在该视图中生成的数据并将其直接传递给模型,或者我是否需要返回为视图提供服务的控制器并从控制器调用模型?
【问题讨论】:
标签: model-view-controller codeigniter
在 CodeIgniter 中,视图从控制器获取数据,控制器解复用/验证参数并从模型中检索适当的数据。重要的是:
视图是输出。视图不直接与模型耦合,因为它们定义了 HTML/XML/JSON/CSS(页面、页面的逻辑部分或输出数据,如 API 和资源)。这意味着您不会从 CI 中的视图调用模型。
控制器是代理。控制器和模型不产生输出。控制器接受 GET 和 POST 请求并发出视图所需的调用以打印结果,通常检查参数并多路复用多个模型调用以获取所有适当的数据。
模型获取和放置数据。模型应该以不可知的格式返回其数据:作为模型的数据对象,或者作为更通用(但一致)的数据散列。返回的模型数据越清晰,您的视图和模型之间的耦合就越少(并且您能够重用模型片段的次数越多)。
在 CodeIgniter 中有几个地方你可能会发现重叠:
目标是让您的视图不知道您的模型,除非它们从它们那里接收符合特定规范的数据。控制器只是获取和放置(它们既不生成 HTML 输出,也不直接访问数据),模型大多是 SQL 或其他形式的获取数据并将其填充到结构化的东西中。
【讨论】:
在与 MVC 无关的方法中,我会说返回到模型的视图是 correct approach。纯粹主义者可能会说总是回到控制器。
来自here的评论...
模型管理行为和 应用领域的数据, 回应信息请求 关于它的状态(通常来自 查看),并响应指令 改变状态(通常从 控制器)。
短语“通常”是关键。模式在某种程度上是为了下游的可管理性和可维护性。有时模式会阻碍以可维护和可管理的方式实现目标,有时会被过度使用。
我认为在这种情况下(小规模)采用任何一种方式都可以……但这也与您如何在应用程序范围内解决问题有关。
【讨论】:
是的,您将表单数据提交给控制器函数。然后该函数处理数据并调用视图。
如果你尝试任何其他方式,你最终会陷入代码地狱。
一个函数可以处理表单的原始显示和该表单的提交。
只需检查表单是否已提交,如果已提交,则处理其数据,否则显示表单。
function login(){
if($this->input->post('submitted')==1){
//process the form data
}else{
//show the form
}
}
【讨论】: