欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

PHP搭建自己的MVC框架 控制器

程序员文章站 2023-02-28 15:27:54
判断接收到的路由 来进行处理

判断接收到的路由 来进行处理

<?php
namespace core\lib;
class route
{
    public $ctrl;
    public $action;
    public function __construct()
    {
        /*
         * 隐藏index.php
         * 获取url参数部分
         *返回对应控制器方法
         */
        if(isset($_server['request_uri']) && $_server['request_uri'] !='/'){
            $path = $_server['request_uri'];
            $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 = 'index';
            }
            $count = count($patharr) + 2;
            $i = 2;
            while($i < $count){
                if(isset($patharr[$i+1])){
                    $_get[$patharr[$i]] = $patharr[$i+1];
                }
                $i = $i+2;
            }
        } else {
            $this->ctrl = 'index';
            $this->action = 'index';
        }
    }
}

最后路由的格式为 index/index/id/3/date/31 格式

通过俩参数去获得get的 值

如 id:3 date:31

如果 date后无值 则跳过循环 得出 id:3

$route = new \core\lib\route();
$ctrlclass = $route->ctrl;
$action = $route->action;
$ctrlfile = app.'/ctrl/'.$ctrlclass.'ctrl.php';
$ctrlclass = '\\'.module.'\ctrl\\'.$ctrlclass.'ctrl';
if(is_file($ctrlfile)){
    include $ctrlfile;
    $ctrl = new $ctrlclass();
    $ctrl->$action();
}else{
    throw new \exception('找不到控制器'.$ctrlclass);
}

然后得到的数据再去处理

得到对应的控制器 方法 参数

最终得到想要的控制器和方法