【问题标题】:POST in PHP MVC Controller?在 PHP MVC 控制器中发布?
【发布时间】:2010-12-30 10:31:29
【问题描述】:

我正在为我的后端实现学习 PHP MVC 模式。看看这个优秀的例子:

在 PHP 中实现 MVC:控制器

http://onlamp.com/pub/a/php/2005/11/03/mvc_controller.html

我对 GET 中的执行流程感到满意。 但是没有提到 POST 中发生的事情。 POST 的典型控制器代码会做什么?我想知道我是否在这里误解了一些明显的东西,因为我在以前的 SO 帖子或 Google 中找不到类似的情况。

例如:一个管理人员(姓名、姓氏、年龄)的应用想要在 POST 到达控制器时向 db 添加一条记录。 接下来发生什么? 我的猜测是根本没有使用“视图”,或者可能用于确认? 是否只是从控制器调用向数据库添加记录的模型类? 还是我完全跳过控制器进行 POST 并直接转到“添加记录”脚本?

有没有可用的例子?

提前致谢, 阿里

【问题讨论】:

    标签: php model-view-controller controller


    【解决方案1】:

    通常,控制器会处理请求(控制器处理所有请求),然后调用模型以根据请求实际操作数据,然后重定向到其他地方(触发新的 GET 请求),或者调用输出结果页面的视图。

    【讨论】:

      【解决方案2】:

      嗯,POST 基本上与 GET 相同,只是客户端发送到服务器的一些随机信息块。所以你可以用同样的方式对待它。

      我在 PHP 中使用 CodeIgniter MVC 框架。它使用 GET URI 路由到控制器及其方法。当 POST 请求到来时,它会以同样的方式处理它的 URI。后面的动作掌握在程序员手里,直接访问POST请求数据,或者通过一些包装器,他也可以完全不用。

      我需要说你专注于错误的部分。 MVC 不是万能的模型,也没有说明如何处理 POST 或 GET 请求。这只是一个简单的原则,早在“MVC”这个名字作为关于逻辑、数据和表示的拆分原则而闻名之前就已经知道了。而且大多数软件(从旧到新)实际上都进行了这种拆分,因为在大多数情况下很难不这样做。在某些应用程序中,边界不是那么明显,其中一些甚至没有对象模型。应用程序的实现始终由您决定,因为 MVC 不会告诉您要编写什么,而只是提供有关代码最高级别组织的一些线索。

      附:对不起我的英语不好。

      【讨论】:

      • 谢谢大家。生病将此标记为正确答案,因为它回答了我的问题。只想提一下,我以前曾在桌面环境中使用过 MVC,但 POST 部分让我感到困惑。我将尝试将其视为 GET。问候阿里
      【解决方案3】:

      好吧,如果您要构建自己的 MVC 模式解决方案,您可能会做一件棘手的事情。由于您正在处理 MVC,因此您应该拥有一个非常可靠的路由管理器。因此,在解析您的 URL 并定义您应该触发的控制器/方法之后,您可以进行如下操作:

      <?php 
          ...;
          $method_name = (count($_POST) > 0) ? "post_".$route_result : $route_result;
          ...;
      

      稍后在您的控制器类中,您可以执行以下操作:

      <?php
      namespace Controllers;
      
      class MyController extends \System\Controller {
          function my_method($whatever = null){
              ...;
              return $this->view($model_or_whatever); // supposed that you prepared view Class in routes
          }
      
          function post_my_method($whatever = null){
              ...;
              return $this->view($model_or_whatever); // supposed that you prepared view Class in routes
          }
      
      }
      

      【讨论】:

      • 请不要在此处使用 txtspeak。 “u”、“r”和“smth”不是单词。
      • 下次不重复了,我的英语不是很好或者我只是习惯了缩短我的消息
      猜你喜欢
      • 1970-01-01
      • 2013-12-15
      • 2017-12-09
      • 1970-01-01
      • 2013-01-13
      • 2017-11-22
      • 2017-01-01
      • 2017-06-22
      • 2016-06-12
      相关资源
      最近更新 更多