资讯专栏INFORMATION COLUMN

分享一个PHP项目或者框架可用的路由类Router.class.php

Harriet666 / 1340人阅读

摘要:功能描述这个路由类本来是我自己框架里的一个核心类文件,因为我想听听大家的看法和建议,所以才放出来,如果有什么建议的请直接说把,欢迎吐槽。

功能描述:
这个路由类本来是我自己框架里的一个核心类文件,因为我想听听大家的看法和建议,所以才放出来,如果有什么建议的请直接说把,欢迎吐槽。Router.class.php是一个实现url参数打包的php类文件,可用于基于mvc架构设计的项目,本类并未做异常处理,使用者可以自行扩展

参数说明:
$url_mode:url模式,0 动态传参模式 例如:www.ruanpower.com/index.php?m=home&c=index&a=test&aid=5 1 pathinfo模式 例如:www.ruanpower.com/home/index/test/aid/5
$var_module: 模块变量名 例如:m、module
$var_controller:控制器变量名  例如:c、controller
$var_action: 方法变量名 例如: a、action

/**
 * 框架路由类
 *
 * @author mgckid
 */
class Router {

    static private $url_mode;
    static private $var_controller;
    static private $var_action;
    static private $var_module;

    /**
     * 初始化方法
     * @param type $config
     */
    static public function init($config) {
        self::$url_mode = $config["URL_MODE"];
        self::$var_controller = $config["VAR_CONTROLLER"];
        self::$var_action = $config["VAR_ACTION"];
        self::$var_module = $config["VAR_MODULE"];
    }

    /**
     * 获取url打包参数
     * @return type
     */
    static public function makeUrl() {
        switch (self::$url_mode) {
            //动态url传参 模式
            case 0:
                return self::getParamByDynamic();
                break;
            //pathinfo 模式
            case 1:
                return self::getParamByPathinfo();
                break;
        }
    }

    /**
     * 获取参数通过url传参模式
     */
    static private function getParamByDynamic() {
        $arr = empty($_SERVER["QUERY_STRING"]) ? array() : explode("&", $_SERVER["QUERY_STRING"]);
        $data = array(
            "module" => "",
            "controller" => "",
            "action" => "",
            "param" => array()
        );
        if (!empty($arr)) {
            $tmp = array();
            $part = array();
            foreach ($arr as $v) {
                $tmp = explode("=", $v);
                $tmp[1] = isset($tmp[1]) ? trim($tmp[1]) : "";
                $part[$tmp[0]] = $tmp[1];
            }
            if (isset($part[self::$var_module])) {
                $data["module"] = $part[self::$var_module];
                unset($part[self::$var_module]);
            }
            if (isset($part[self::$var_controller])) {
                $data["controller"] = $part[self::$var_controller];
                unset($part[self::$var_controller]);
            }
            if (isset($part[self::$var_action])) {
                $data["action"] = $part[self::$var_action];
                unset($part[self::$var_action]);
            }
            switch ($_SERVER["REQUEST_METHOD"]) {
                case "GET":
                    unset($_GET[self::$var_controller], $_GET[self::$var_action], $_GET[self::$var_module]);
                    $data["param"] = array_merge($part, $_GET);
                    unset($_GET);
                    break;
                case "POST":
                    unset($_POST[self::$var_controller], $_POST[self::$var_action], $_GET[self::$var_module]);
                    $data["param"] = array_merge($part, $_POST);
                    unset($_POST);
                    break;
                case "HEAD":
                    break;
                case "PUT":
                    break;
            }
        }
        return $data;
    }

    /**
     * 获取参数通过pathinfo模式
     */
    static private function getParamByPathinfo() {
        $part = explode("/", trim($_SERVER["REQUEST_URI"], "/"));
        $data = array(
            "module" => "",
            "controller" => "",
            "action" => "",
            "param" => array()
        );
        if (!empty($part)) {
            krsort($part);
            $data["module"] = array_pop($part);
            $data["controller"] = array_pop($part);
            $data["action"] = array_pop($part);
            ksort($part);
            $part = array_values($part);
            $tmp = array();
            if (count($part) > 0) {
                foreach ($part as $k => $v) {
                    if ($k % 2 == 0) {
                        $tmp[$v] = isset($part[$k + 1]) ? $part[$k + 1] : "";
                    }
                }
            }
            switch ($_SERVER["REQUEST_METHOD"]) {
                case "GET":
                    unset($_GET[self::$var_controller], $_GET[self::$var_action]);
                    $data["param"] = array_merge($tmp, $_GET);
                    unset($_GET);
                    break;
                case "POST":
                    unset($_POST[self::$var_controller], $_POST[self::$var_action]);
                    $data["param"] = array_merge($tmp, $_POST);
                    unset($_POST);
                    break;
                case "HEAD":
                    break;
                case "PUT":
                    break;
            }
        }
        return $data;
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21114.html

相关文章

  • 分享一些简单 Laravel 编码实践

    摘要:关于,它使用起来简单且舒适适用于编写产品代码,并能极大的推动开发过程。这里有一些在开发中值得记住的简单建议最大限度的使用你的文件不要破坏框架核心,不要编辑文件夹中的文件,你可以选择继承相关函数来实现。 showImg(https://segmentfault.com/img/remote/1460000018416776?w=808&h=449); 将任何 PHP 框架称为最好的框架都...

    cyixlq 评论0 收藏0
  • Laravel 编码实践分享

    摘要:关于,它使用起来简单且舒适适用于编写产品代码,并能极大的推动开发过程。中我最喜欢的一点是它是使用当下编程中的最佳实践所构建的。的工作原理是这样的,对于一个命名为的表,希望该表的模型被命名为。尽量为每一个请求创建。 showImg(https://segmentfault.com/img/remote/1460000018303541?w=808&h=449); 将任何 PHP 框架称为...

    wean 评论0 收藏0
  • Lumen 初体验(二)

    摘要:的现状目前是版本,是基于开发。入口文件启动文件和配置文件框架的入口文件是。在路由中指定控制器类必须写全命名空间,不然会提示找不到类。目前支持四种数据库系统以及。使用时发生错误,因为在文件中,的默认驱动是。 最近使用 Lumen 做了 2 个业余项目,特此记录和分享一下。 Lumen 的介绍 在使用一项新的技术时,了解其应用场景是首要的事情。 Lumen 的口号:为速度而生的 La...

    Cheriselalala 评论0 收藏0
  • Symfony2中创建数据模型

    摘要:今天我在这里给大家分享一下在中如何创建数据模型和基于的搭建。对象与数据库的关系通常在电脑的世界里创建的数据模型会转换为数据库里的一条条记录。 Symfony是一款优秀的基于MVC架构的PHP框架。今天我在这里给大家分享一下在Symfony中如何创建数据模型和基于RESTful api的搭建。重点是如何创建数据模型哦! 本教程使用的当前Symfony的LTS版本(Symfony 2.8...

    rainyang 评论0 收藏0
  • 从0开始构建一个属于你自己PHP框架

    摘要:如何构建一个自己的框架为什么我们要去构建一个自己的框架可能绝大多数的人都会说市面上已经那么多的框架了,还造什么轮子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何构建一个自己的PHP框架 为什么我们要去构建一个自己的PHP框架?可能绝大多数的人都会说市面上已经那么多的框架了,还造什么轮子?。我的观点造轮子不是目...

    vpants 评论0 收藏0

发表评论

0条评论

Harriet666

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<