摘要:功能描述这个路由类本来是我自己框架里的一个核心类文件,因为我想听听大家的看法和建议,所以才放出来,如果有什么建议的请直接说把,欢迎吐槽。
功能描述:
这个路由类本来是我自己框架里的一个核心类文件,因为我想听听大家的看法和建议,所以才放出来,如果有什么建议的请直接说把,欢迎吐槽。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
摘要:关于,它使用起来简单且舒适适用于编写产品代码,并能极大的推动开发过程。这里有一些在开发中值得记住的简单建议最大限度的使用你的文件不要破坏框架核心,不要编辑文件夹中的文件,你可以选择继承相关函数来实现。 showImg(https://segmentfault.com/img/remote/1460000018416776?w=808&h=449); 将任何 PHP 框架称为最好的框架都...
摘要:关于,它使用起来简单且舒适适用于编写产品代码,并能极大的推动开发过程。中我最喜欢的一点是它是使用当下编程中的最佳实践所构建的。的工作原理是这样的,对于一个命名为的表,希望该表的模型被命名为。尽量为每一个请求创建。 showImg(https://segmentfault.com/img/remote/1460000018303541?w=808&h=449); 将任何 PHP 框架称为...
摘要:的现状目前是版本,是基于开发。入口文件启动文件和配置文件框架的入口文件是。在路由中指定控制器类必须写全命名空间,不然会提示找不到类。目前支持四种数据库系统以及。使用时发生错误,因为在文件中,的默认驱动是。 最近使用 Lumen 做了 2 个业余项目,特此记录和分享一下。 Lumen 的介绍 在使用一项新的技术时,了解其应用场景是首要的事情。 Lumen 的口号:为速度而生的 La...
摘要:今天我在这里给大家分享一下在中如何创建数据模型和基于的搭建。对象与数据库的关系通常在电脑的世界里创建的数据模型会转换为数据库里的一条条记录。 Symfony是一款优秀的基于MVC架构的PHP框架。今天我在这里给大家分享一下在Symfony中如何创建数据模型和基于RESTful api的搭建。重点是如何创建数据模型哦! 本教程使用的当前Symfony的LTS版本(Symfony 2.8...
摘要:如何构建一个自己的框架为什么我们要去构建一个自己的框架可能绝大多数的人都会说市面上已经那么多的框架了,还造什么轮子。 showImg(https://segmentfault.com/img/bVNg9F?w=500&h=500); 如何构建一个自己的PHP框架 为什么我们要去构建一个自己的PHP框架?可能绝大多数的人都会说市面上已经那么多的框架了,还造什么轮子?。我的观点造轮子不是目...
阅读 1818·2023-04-26 00:20
阅读 1874·2021-11-08 13:21
阅读 2077·2021-09-10 10:51
阅读 1632·2021-09-10 10:50
阅读 3348·2019-08-30 15:54
阅读 2172·2019-08-30 14:22
阅读 1468·2019-08-29 16:10
阅读 3128·2019-08-26 11:50
极致性价比!云服务器续费无忧!
Tesla A100/A800、Tesla V100S等多种GPU云主机特惠2折起,不限台数,续费同价。
NVIDIA RTX 40系,高性价比推理显卡,满足AI应用场景需要。
乌兰察布+上海青浦,满足东推西训AI场景需要