MVC框架的封装(三)路由类

来源:互联网 发布:淘宝平铺图拍摄 编辑:程序博客网 时间:2024/05/17 20:02

在此提示,此篇博客是接着前两篇写的直接看有可能看不懂。

接下来我们要做的便是完成我们的路由类,首先我们先规范我们的目录,在core目录下建立lib文件夹,然后把route.php路由文件放到里面,然后在immoc.php文件中run() 方法中通过一个方法调用路由类。

$route=new \core\lib\route();

然后我们回到route路由类中,补充我们的命名空间。

  namespace core\lib;

我们需要在路由里面完成我们隐藏我们url中的index.php。直接就是www.xxx.com/控制器/方法。
接下来我们需要在我们的根目录下建立一个.htaccess文件作为重写文件,内容如下

<IfModule mod_rewrite.c>      RewriteEngine on      RewriteCond %{REQUEST_FILENAME} !-f      RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]</IfModule>

然后我们在我们的网址中进行访问,访问 www.你的域名.com/index/index ,如果不加这个文件的话直接访问将会报一个404的错误,加上这个文件那么会访问到一片空白也就是成功了。

接下来我们获取URL的参数部分,我们先通过输出$_SERVER这个变量得到一个数组在这个数组中找到REQUEST_URI部分,首先我们判断一下这个变量是否存在,我们需要在上面建两个属性 一个是控制器ctrl 一个是方法action ,当REQUEST_URI不存在的时候我们默认去index控制器,index方法。REQUEST_URI 存在的时候 样式是/index/index 我们首先需要去掉它的 / 。

<?php     namespace core\lib;    class route    {           public $ctrl;           public $action;           public function __construct()           {                //p($_SERVER);                if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/MVC/'){                 $path = $_SERVER['REQUEST_URI'];                                                                                                                               $patharr=explode('/',trim($path,'/'));          }else{                        $this->ctrl =conf::get('CTRL','route');                        $this->action=conf::get('ACTION','route');                  }           }    }?>

接下来我们分割完后进行判断,获取当前的控制器和方法。写在patharr=explode(/,trim(path,’/’));的下面

if(isset($patharr[0])){                             $this->ctrl = $patharr[0];                        }                        unset($patharr[0]);                        if(isset($patharr[1])){                             $this->action = $patharr[1];                              unset($patharr[1]);                        }else{                       $this->action=conf::get('ACTION','route');                        }

然后我们在imooc.php中run()里面输出整个$route,然后就能看到我们的对于的控制器和方法了 , 然后我们需要用一个循环来队URL中的传值进行一个对应,并且传值是单数的时候不去显示。写在上面if判断的底下

$count = count($patharr)+3;                        $i = 3;                        while ( $i < $count) {                            if(isset($patharr[$i+1])){                             $_GET[$patharr[$i]] = $patharr[$i+1];                            }                             $i = $i + 2;                         }

这样我们的整个路由类就完成了。

0 0