2010-11-30 216 views

回答

0

在MVC不可知论的方法中,我会说回到模型的视图是correct approach。纯粹主义者可能会说总是回到控制器。

here ...注释

模型管理的行为和应用领域的 数据, 响应有关其状态(通常是从 视图)的信息 请求和响应通过 更改状态(通常来自 控制器)。

短语“通常”是关键。模式在一定程度上用于可管理性和可维护性。有时模式是以可维护和可管理的方式完成目标的障碍,有时会被过度使用。

我会认识到,在这种情况下(小规模),任何一条路线都可以正常工作......但它也是关于如何在广泛的应用中解决问题。

+0

所以我会从视图调用模型? – roger 2010-11-30 21:35:58

1

在CodeIgniter视图中从控制器获取它们的数据,该控制器解复用/验证参数并从模型中检索合适的数据。重要的是:

  1. 视图被输出。视图不直接与模型耦合,因为它们定义了HTML/XML/JSON/CSS(页面,页面的逻辑部分或输出数据的其他片段,如API和资源)。这意味着你不要从CI中的视图调用模型。

  2. 控制器是代理。控制器和模型不产生输出。控制器接受GET和POST请求并为视图打印结果所需的调用,通常检查参数并复用多个模型调用以获取所有适当的数据。

  3. 模型获取和放入数据。模型应以不可知的格式返回其数据:作为模型的数据对象,或更一般(但一致)的数据散列。返回的模型数据越清晰,您将在视图和模型之间发现的耦合越少(并且您将能够重复使用模型片段的次数越多)。

CI中有几个地方,你可能会发现重叠:

  • 的JavaScript往往结束了相关的意见(和可能做这样的事情的验证,通常的控制任务)。您可以通过将Javascript移出视图来改善这种情况(适用于较大的部分,对于较小的部分不太适用)。
  • 在PHP中,返回哈希(键/值数组)比返回对象(代码少,但是类型安全性降低)更容易。这通常是耦合的来源。
  • 共享输出的东西通常会进入控制器(您可以通过将它移动到CI帮助程序库中避免这种情况)。

目标是让您的视图不知道您的模型,只是它们从它们接收符合特定规范的数据。控制器只是获取和放置(它们既不生成HTML输出,也不直接访问数据),模型主要是SQL或其他形式的获取数据并将其填充到结构化的东西中。

0

是的,您将表单数据提交给控制器功能。该函数然后处理数据并调用视图。

如果您尝试任何其他方式,您将以代码地狱结束。

一个函数可以处理表单的原始显示和表单的提交。

只需检查表单是否已提交,如果是,处理它的数据,否则显示表单。

function login(){ 

    if($this->input->post('submitted')==1){ 

    //process the form data 

    }else{ 

    //show the form 

    } 

} 
相关问题