对于MVC,PHP的流程感到困惑

时间:2011-09-22 14:28:33

标签: php model-view-controller controller

我一直在尝试了解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();
    }
    
  3. 没有文件夹或类视图,也没有用于加载的文件夹或类。我可以在不同的文件中找到功能导航,但其文件夹位于不同的位置。如何在没有包含或要求的情况下访问该文件?

    1. search.php之一controller.php如何知道search.php已经请求了信息?也许这在第一个问题上是多余的,但我对此非常困惑。
    2. 我知道它很长,抱歉。

      * 编辑: *从我从项目中学到的东西是,控制器中的所有功能都有Action就在它们的末尾将指向一个视图对应的名字。例如index.php / .tpl

       class IndexController extends Zend_Controller_Action{
      
          public function indexAction(){
          /**
      
          Somecode
          **/
      
          }
      
      }
      

      干杯

1 个答案:

答案 0 :(得分:0)

大多数MVC框架为你做了大量的幕后魔术,这可能是你对事情如何运作感到困惑的原因。

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

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

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

我希望这有点帮助。