将每个请求发送到适当的控制器

时间:2010-12-13 13:18:50

标签: php model-view-controller controller bootstrapping

我想制作一个小型的Web应用程序,我不知道该怎么做。 我想要做的是将每个请求发送到正确的控制器。 CodeIgniter如何做到这一点。

因此,如果用户要求domain.com/video/details 我希望我的bootstrap(index?)文件将他发送到“Video”控制器类并调用该类中的“details”方法。

如果用户要求domain.com/profile/edit我想将他发送到“Profile”控制器类并调用该类中的“edit”方法。

有人可以解释我应该怎么做吗?我有一些使用MVC框架的经验,但从来没有用MVC写过一些东西。

谢谢!

编辑:我现在明白了url如何指向正确的Controller,但是我没有看到Controller的对象实例在哪里,调用正确的方法?

3 个答案:

答案 0 :(得分:1)

您需要重新路由您的请求。使用apache,可以使用mod_rewrite完成。

例如,将.htaccess文件添加到公共基目录并添加以下内容:

RewriteEngine on

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^(.*)$ index.php?rt=$1 [L,QSA]

这会重定向尝试访问的用户

  

/简档/编辑

  

的index.php?RT =简档/编辑

在index.php中,您可以访问 $ _ GET ['rt'] 以确定已请求的控制器和操作。

答案 1 :(得分:0)

  1. 使用mod-rewrite(.htaccess)来 重写网址 www.example.com/taco to www.example.com/index.php?taco /
  2. 在index.php中
  3. ,抓住第一个网址 参数键,用于路由到 正确的网址。因为它看起来 比如“taco /”
  4. 您可能想要添加/到前面 如果它不存在则返回。如 这将使网址正常化 让生活更轻松
  5. 如果你想保留这种能力 有传统的查询字符串。 直接检查URL并采取 查询字符串部分。打破那个 在?,这将离开你 键0和其余部分的路由信息 在密钥1中,将其拆分为&,然后 将每一个分开=并设置 首先是关键,第二个是 数组的值。替换$ _GET 用那个数组。
  6. 示例:

    $path = explode("?", $_SERVER["QUERY_STRING"],2);
    $url = $path[0];
    if(substr($url,0,1) != "/")
    {
        $url = "/".$url;
    }
    if(substr($url,-1,1) != "/")
    {
        $url = $url."/";
    }
    unset($_GET);
    foreach(explode("&", $path[1]) as $pair)
    {
        $get = explode("=", $pair, 2);
        $_GET[$get[0]] = $get[1];
    }
    
    // Define the Query String Path
    define("QS_PATH", $url);
    

答案 2 :(得分:0)

根据您想要做什么或者您想做多少工作,另一个选择与编写您自己的MVC是使用Zend Framework。它完全符合您的要求和更多。您仍然需要配置其他答案中提到的URL重写,但它快速而简单。

即使您对Zend Framework不感兴趣,以下链接也可以帮助您配置重写规则:http://framework.zend.com/wiki/display/ZFDEV/Configuring%2BYour%2BURL%2BRewriter