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