在此提示,此篇博客是接着前两篇写的直接看有可能看不懂。
接下来我们要做的便是完成我们的路由类,首先我们先规范我们的目录,在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;
}
这样我们的整个路由类就完成了。