成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

分享一個(gè)PHP項(xiàng)目或者框架可用的路由類Router.class.php

Harriet666 / 1347人閱讀

摘要:功能描述這個(gè)路由類本來是我自己框架里的一個(gè)核心類文件,因?yàn)槲蚁肼犅牬蠹业目捶ê徒ㄗh,所以才放出來,如果有什么建議的請(qǐng)直接說把,歡迎吐槽。

功能描述:
這個(gè)路由類本來是我自己框架里的一個(gè)核心類文件,因?yàn)槲蚁肼犅牬蠹业目捶ê徒ㄗh,所以才放出來,如果有什么建議的請(qǐng)直接說把,歡迎吐槽。Router.class.php是一個(gè)實(shí)現(xiàn)url參數(shù)打包的php類文件,可用于基于mvc架構(gòu)設(shè)計(jì)的項(xiàng)目,本類并未做異常處理,使用者可以自行擴(kuò)展

參數(shù)說明:
$url_mode:url模式,0 動(dòng)態(tài)傳參模式 例如: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打包參數(shù)
     * @return type
     */
    static public function makeUrl() {
        switch (self::$url_mode) {
            //動(dòng)態(tài)url傳參 模式
            case 0:
                return self::getParamByDynamic();
                break;
            //pathinfo 模式
            case 1:
                return self::getParamByPathinfo();
                break;
        }
    }

    /**
     * 獲取參數(shù)通過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;
    }

    /**
     * 獲取參數(shù)通過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;
    }

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21114.html

相關(guān)文章

  • 分享一些簡(jiǎn)單 Laravel 編碼實(shí)踐

    摘要:關(guān)于,它使用起來簡(jiǎn)單且舒適適用于編寫產(chǎn)品代碼,并能極大的推動(dòng)開發(fā)過程。這里有一些在開發(fā)中值得記住的簡(jiǎn)單建議最大限度的使用你的文件不要破壞框架核心,不要編輯文件夾中的文件,你可以選擇繼承相關(guān)函數(shù)來實(shí)現(xiàn)。 showImg(https://segmentfault.com/img/remote/1460000018416776?w=808&h=449); 將任何 PHP 框架稱為最好的框架都...

    cyixlq 評(píng)論0 收藏0
  • Laravel 編碼實(shí)踐分享

    摘要:關(guān)于,它使用起來簡(jiǎn)單且舒適適用于編寫產(chǎn)品代碼,并能極大的推動(dòng)開發(fā)過程。中我最喜歡的一點(diǎn)是它是使用當(dāng)下編程中的最佳實(shí)踐所構(gòu)建的。的工作原理是這樣的,對(duì)于一個(gè)命名為的表,希望該表的模型被命名為。盡量為每一個(gè)請(qǐng)求創(chuàng)建。 showImg(https://segmentfault.com/img/remote/1460000018303541?w=808&h=449); 將任何 PHP 框架稱為...

    wean 評(píng)論0 收藏0
  • Lumen 初體驗(yàn)(二)

    摘要:的現(xiàn)狀目前是版本,是基于開發(fā)。入口文件啟動(dòng)文件和配置文件框架的入口文件是。在路由中指定控制器類必須寫全命名空間,不然會(huì)提示找不到類。目前支持四種數(shù)據(jù)庫系統(tǒng)以及。使用時(shí)發(fā)生錯(cuò)誤,因?yàn)樵谖募校哪J(rèn)驅(qū)動(dòng)是。 最近使用 Lumen 做了 2 個(gè)業(yè)余項(xiàng)目,特此記錄和分享一下。 Lumen 的介紹 在使用一項(xiàng)新的技術(shù)時(shí),了解其應(yīng)用場(chǎng)景是首要的事情。 Lumen 的口號(hào):為速度而生的 La...

    Cheriselalala 評(píng)論0 收藏0
  • Symfony2中創(chuàng)建數(shù)據(jù)模型

    摘要:今天我在這里給大家分享一下在中如何創(chuàng)建數(shù)據(jù)模型和基于的搭建。對(duì)象與數(shù)據(jù)庫的關(guān)系通常在電腦的世界里創(chuàng)建的數(shù)據(jù)模型會(huì)轉(zhuǎn)換為數(shù)據(jù)庫里的一條條記錄。 Symfony是一款優(yōu)秀的基于MVC架構(gòu)的PHP框架。今天我在這里給大家分享一下在Symfony中如何創(chuàng)建數(shù)據(jù)模型和基于RESTful api的搭建。重點(diǎn)是如何創(chuàng)建數(shù)據(jù)模型哦! 本教程使用的當(dāng)前Symfony的LTS版本(Symfony 2.8...

    rainyang 評(píng)論0 收藏0
  • 從0開始構(gòu)建一個(gè)屬于你自己PHP框架

    摘要:如何構(gòu)建一個(gè)自己的框架為什么我們要去構(gòu)建一個(gè)自己的框架可能絕大多數(shù)的人都會(huì)說市面上已經(jīng)那么多的框架了,還造什么輪子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何構(gòu)建一個(gè)自己的PHP框架 為什么我們要去構(gòu)建一個(gè)自己的PHP框架?可能絕大多數(shù)的人都會(huì)說市面上已經(jīng)那么多的框架了,還造什么輪子?。我的觀點(diǎn)造輪子不是目...

    vpants 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<