学习php自行开发MVC框架过程(四)
一、创建路由类
1、首先我们要隐藏我们路由上的index.php
2、获取到当前路由的参数部分
3、返回对应控制器和方法
现在我们要在根目录下建一个.htaccess的文件,内容并为
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [PT,L]
</IfModule>
他的作用就是当url过来的时候我们把它的路径设置到index.php中
所以当我们访问的网址是www.xxx.com/index/index的话我们实际访问的是www.xxx.com/index.php/index/index
那么我们想要取到控制器和方法呢,我们就要用$_SERVER函数中的REQUEST_URI可以取到index/index
现在我们在core目录下建一个route文件,内容为
<?php
namespace core\lib;
class route
{
public $controller;
public $action;
public function __construct()
{
/**
* 1.隐藏index.php
* 2.获取URL 参数部分
* 3.返回对应控制器和方法
*/
//p($_SERVER);
if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI'] != '/'){
// index/index
$path = $_SERVER['REQUEST_URI'];
$patharr = explode('/', trim($path,'/'));
//p($patharr);
if(isset($patharr[0])){ //取当前控制器
unset($patharr[0]);
}
if(isset($patharr[1])){ //取当前方法
$this->controller = $patharr[1];
}
unset($patharr[1]);
if(isset($patharr[2])){
$this->action = $patharr[2];
unset($patharr[2]);
}
else
{
$this->action = 'index';
}
//p($patharr);
//url 多余部分转化成 GET
//id/1/str/2/test/3
$count = count($patharr) + 3;
$i = 3;
while($i < $count){
if(isset($patharr[$i + 1])){
$_GET[$patharr[$i]] = $patharr[$i + 1]; //如果参数的数量是奇数的话多出来的那一个就先不要他
}
$i =$i + 2;
}
//p($_GET);
}else{
$this->controller = 'index';默认控制器指向index控制器
$this->action = 'index';//默认方法指向index方法
}
}
}
到此我们的路由类就创建完成了