1.我们都知道每个框架它们的路由都是不一样的,例如YII框架,它的路由就是%F,而TP3.2框架是以 / 区分,而我们自己的框架
我们可以自己去设计,这都是无所谓的,首先我不得不说一下,路由主要是用PHP函数:$_SERVER来分割访问地址,然后从中找到
我们所要访问的控制器,方法,以及所传的参数,我们还需要做的就是对参数的一种判断,判断什么呢?就是如果访问地址我写成这样
www.test/Home/Index/index/id/2/3,这样的网址,我们就需要对参数进行判断了,下面看一下对参数进行循环判断的代码:
$count = count($patharr)+3; // p($count);die; $i = 3; while($i<$count) { if(isset($patharr[$i +1])) { $_GET[$patharr[$i]] = $patharr[$i+1]; } $i = $i+3; }因为我们对访问的网址进行了分割,从而方便我们找出所指向的模块,控制器以及方法。然而分割后的参数名称是【3】,所以我们进行了+3,
下面是我们框架的路由模块的完整代码:
<?php /** * Created by PhpStorm. * User: 59106 * Date: 2017/6/27 * Time: 20:19 */ namespace core\lib; class rount { public $mo; public $ctrl; public $action; public function __construct() { /* * 隐藏index.php * 在这里要想办法获取模块(admin/home) * 获取当中的参数部分 * 获取当中的控制器和方法 */ if(isset($_SERVER['REQUEST_URI']) && $_SERVER['REQUEST_URI']!='/') { $path = $_SERVER['REQUEST_URI']; //p($path);exit; $patharr = explode('/',trim($path,'/')); //print_r($patharr);exit; /* * Array ( [0] => Home [1] => Index [2] => index ) */ //首先我们要想一下,如果他只输入一个Home的话,就默认为Home/index/index,那样的话,我们就需要改一下代码了 if(isset($patharr[0])) { $this->mo = $patharr[0]; } unset($patharr[0]); if(isset($patharr[1])) { $this->ctrl = $patharr[1]; unset($patharr[1]); }else{ $this->ctrl = 'index'; } if(isset($patharr[2])) { $this->action = $patharr[2]; unset($patharr[2]); }else{ $this->action = 'index'; } // 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 = 'index'; // // } //p($patharr);die; $count = count($patharr)+3; // p($count);die; $i = 3; while($i<$count) { if(isset($patharr[$i +1])) { $_GET[$patharr[$i]] = $patharr[$i+1]; } $i = $i+3; } // p($_GET);exit; }else{ $this->mo = 'Home'; $this->ctrl = 'index'; $this->action = 'index'; } } }