php单入口路由设计,php 简单路由实现

在PHP中,利用单一入口文件实现路径的访问,实现形如 http://localhost/project/index.php/module/method/param_key/param_val 的访问路由

module:模块名称(类)

method:模块方法

param_key:参数名称

param_val:参数值

一、新建项目 route

在 route 下新 index.php,代码如下

error_reporting(0);

define(DIR_CONTROLLER, 'controller/'); // 定义控制器目录

date_default_timezone_set("Asia/Shanghai");

$_DocumentPath = $_SERVER['DOCUMENT_ROOT'];

$_RequestUri = $_SERVER['REQUEST_URI'];

$_UrlPath = $_RequestUri;

$_FilePath = __FILE__;

$_AppPath = str_replace($_DocumentPath, '', $_FilePath); //==>\route\index.php

$_AppPathArr = explode(DIRECTORY_SEPARATOR, $_AppPath);

for ($i = 0; $i < count($_AppPathArr); $i++) {

$p = $_AppPathArr[$i];

if ($p) {

$_UrlPath = preg_replace('/^\/'.$p.'\//', '/', $_UrlPath, 1);

}

}

$_UrlPath = preg_replace('/^\//', '', $_UrlPath, 1);

$_AppPathArr = explode("/", $_UrlPath);

$_AppPathArr_Count = count($_AppPathArr);

$arr_url = array(

'controller' => 'Index',

'method' => 'index',

'parms' => array()

);

$arr_url['controller'] = ucfirst($_AppPathArr[0]); // 模块名称,首字母转为大写

$arr_url['method'] = $_AppPathArr[1];

// 获取参数

if ($_AppPathArr_Count > 2 and $_AppPathArr_Count % 2 != 0) {

//die('参数错误');

} else {

for ($i = 2; $i < $_AppPathArr_Count; $i+=2) {

$arr_temp_hash = array(strtolower($_AppPathArr[$i])=>$_AppPathArr[$i + 1]);

$arr_url['parms'] = array_merge($arr_url['parms'], $arr_temp_hash);

}

}

$module_name = $arr_url['controller'];

$module_file = DIR_CONTROLLER.$module_name.'.class.php';

$method_name = $arr_url['method'];

if (file_exists($module_file)) {

include $module_file;

$obj_module = new $module_name();

if (!method_exists($obj_module, $method_name)) {

die("要调用的方法不存在");

} else {

if (is_callable(array($obj_module, $method_name))) {

$obj_module -> $method_name($arr_url['parms']);

}

}

} else {

die("定义的模块不存在");

}

?>

二、在项目目录下新建 controller 文件夹,并在该文件夹下新建 Welcome.class.php 文件,代码如下

class Welcome{

public function index($param){

echo 'Hello World!';

}

}

?>

三、地址栏输入 http://localhost/route/index.php/welcome/index/

页面输出 “ Hello World! ”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值