【问题标题】:MVC, handling POST data, preparing form field valuesMVC,处理 POST 数据,准备表单字段值
【发布时间】:2011-01-26 09:49:00
【问题描述】:

我正在使用 Codeigniter 开发一个应用程序,并且一直在阅读有关 Ruby on the Rails 的一些信息。特别是 Skinny Controller,Fat Model 似乎很有意义。它真的让我可以查看控制器并知道到底发生了什么,并允许非常非常快速的调整和错误修复。

然而,我遇到的一个绊脚石是,我在哪里处理 POST 数据。我是否将其称为控制器中的一堆变量并将其传递给模型。还是我直接从模型中访问它?

此外,在考虑预填充表单字段值时,我也遇到了同样的问题。我应该从控制器调用单个方法并将结果传递给视图,还是只制作一堆变量并将它们直接从控制器传递给视图。

非常感谢任何指导。

【问题讨论】:

    标签: php model-view-controller codeigniter


    【解决方案1】:

    有几种方法可以处理此问题,但通常认为调用$this->CI->input->post( $item ) 的视图不一致。通常,如果仅限于纯粹显示数据,您的视图是最好的,并且它应该进行的唯一函数调用是像 anchorlang 等这样的调用。最好避免让您的模型从外部获取数据,尤其是当它们可以在信息中传递时(可能的例外是语言和配置数据)。 CodeIgniter 中传统的关注点分离是 Model 存储数据,View 显示数据,Controller 操作它(有时这将是库操作数据,而 Controller 调用库函数)。

    如果将信息传入视图,然后从视图输出为<?php echo $value; ?>,则预填充更清晰,但有some exceptions

    基本上,这些是我遵循的规则:

    • 模型没有收到来自控制器的输入保存。
      • 如果需要操作,它只调用辅助函数和库方法。
      • 仅当数据需要以特定方式(即:序列化等)存储时才会处理数据。
    • 视图没有收到来自控制器的输入保存。
      • 它只调用用于字符串查找的辅助函数,不调用库方法。
      • 它唯一需要操作数据的时间是在查找配置或语言数据时。这应该理解为翻译。

    【讨论】:

      【解决方案2】:

      http://teknoid.wordpress.com/2009/01/06/another-way-to-think-about-mvc/

      看起来模型(银行家)不应该直接与视图(客户)交谈,反之亦然。因此,请始终使用 Controller(出纳员)作为中间人。

      【讨论】:

        【解决方案3】:

        我不确定这里的“规则”是什么,但我通常坚持只检查需要在控制器中完成的操作。因此,找出已发布的内容,以及接下来会发生什么。通常调用模型进行选择、更新等,包括在模型中进一步处理的 POST 数据,具体取决于调用的函数。

        至于预填充,我总是试图将所有这些逻辑排除在视图之外。所以在控制器中我检查应该显示哪些变量(默认的东西或发布的数据),然后将它们发送到视图。这样视图就保持简单,您唯一需要做的就是显示一个变量。

        【讨论】:

          【解决方案4】:

          控制器应该做所有的数据处理。

          使用您的控制器获取您的 POST 数据,然后将其传递给模型。

          模型通过将 true 传回控制器来确认一切正常。

          此时控制器将数据传递给成功视图。

          【讨论】:

          • 这就是我要找的。但是,您能否详细说明如何使用这种思想来发送表单选择的选项?
          【解决方案5】:

          CodeIgniter 有一个很棒的 form_validation 库,在控制器中运行: http://codeigniter.com/user_guide/libraries/form_validation.html#overview

          在 form_validation 库快速轻松地验证 $_POST 数据后,根据您的预设规则,您将验证后的数据传递给模型和/或视图。

          【讨论】:

          • 你好夏天。是的,使用这个,但我想知道我是在传递给模型之前将它调用到控制器中的一个数组中,还是我从模型中与 $this->input->post() 交谈。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-06-23
          • 1970-01-01
          • 2014-10-06
          • 2012-01-24
          • 1970-01-01
          • 2012-11-24
          • 1970-01-01
          相关资源
          最近更新 更多