【问题标题】:Confused about the flow of MVC, PHP对MVC、PHP的流程感到困惑
【发布时间】:2011-09-22 14:28:32
【问题描述】:

我一直在尝试了解 MVC,但我对输入到控制器然后到模型的流程有一些疑问。

  1. 假设用户访问 example.com 并进入他们的主页。然后他们选择 search.php 链接。 controller.php如何知道用户请求的是search.php而不是user.php?
  2. 当controller.php 知道已经选择了search.php 时,它将加载模型,然后加载view.php。但是当调用这些代码时,代码将如下所示。

    class Search extends Core_Search_Controller
    
    public function inboxSearch(){
      $this->view->navigation = $this->navigation();
      $this->load->box = $this->box();
    }
    

没有文件夹或类视图,也没有用于加载的文件夹或用于加载的类。而且我可以在不同的文件中找到功能导航,但它的文件夹位于不同的位置。它如何在不包含或要求的情况下访问该文件?

  1. 一次 search.php controller.php 如何知道 search.php 请求了信息?也许这与第一个问题相比是多余的,但我对此很困惑。

我知道它很长,对此感到抱歉。

*编辑:*从我所从事的项目中了解到,控制器中的所有功能在它们的末尾都有 Action,它们将直接指向带有对应的名称。比如index.php/.tpl

 class IndexController extends Zend_Controller_Action{

    public function indexAction(){
    /**

    Somecode
    **/

    }

}

干杯

【问题讨论】:

    标签: php model-view-controller controller


    【解决方案1】:

    大多数 MVC 框架为您做了很多幕后魔术,这可能是您对事情如何工作感到困惑的地方。

    要回答您的第一个问题,大多数框架都使用带有重写规则的 .htaccess 文件,该规则会将所有流量重定向到您的控制器。因此,当您请求 search.php 时,它实际上会调用控制器而不是 search.php。从那里,控制器可以查看您最初请求的内容(在本例中为 search.php)以找出合适的模型和视图。

    我相信您第二个问题的答案是它会根据需要自动加载文件。这是另一个神奇之处,它可以查看类名并找出文件的位置并加载它。您可以在 PHP 手册中阅读更多相关信息。 http://php.net/manual/en/language.oop5.autoload.php

    为了回答您的最后一个问题,获取请求的信息通常由控制器在查看请求时处理。例如,如果您请求“example.com/blog/7263”,它将确定您想要“博客”模型,并且 id 号是 7263。根据您使用的框架,您配置它的方式会有所不同。

    希望对你有所帮助。

    【讨论】:

    • 是的,这确实有帮助。我仍然确定控制器如何知道您想要“博客”模型和 ID 号,但我正在路上。
    猜你喜欢
    • 2019-01-15
    • 2012-09-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-06-16
    • 1970-01-01
    相关资源
    最近更新 更多