MVC框架路由模块的解析

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';

            }

        }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

A_青涩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值