前言
最近自己搭建了API,但又觉得目录下面丢一堆文件夹很没有技术含量,就参照了MVC框架的思想,实现了一个简易的PHP路由。
实现
因为该框架是配合API使用,所以没有采用完整的MVC架构,模式如下:example.com/index.php?controller/param1=xxx¶m2=xxx
使用伪静态后:example.com/controller/param1=xxx¶m2=xxx
其中,controller即为模块名,后面就是传递给模块的参数。
代码
index.php<?php
/*
* A PHP simple route framework
* Author: hiCasper
* http://blog.hicasper.com/post/58.html
*/
//环境变量
date_default_timezone_set("Asia/Shanghai");
define('APP_DIR', dirname(__FILE__));
define('APP_DEBUG', True);
//字符串过滤函数
function STR_FILTER($_STR, $MODE = 1) {
return preg_replace('/[^0-9a-zA-Z_=\/]+/', '', $_STR);
}
$Q_PARAM = array(
'controller' => 'default',
'data' => ''
);
//处理Query String
$Q_STRING = $_SERVER['QUERY_STRING'];
$Q_STRING = trim($Q_STRING, '/');
$Q_STRING = STR_FILTER($Q_STRING);
$Q_ARRAY = explode('/', $Q_STRING, 2);
$Q_COUNT = count($Q_ARRAY);
if ($Q_COUNT > 0 && $Q_ARRAY[0] != '') {
$Q_PARAM['controller'] = strtolower($Q_ARRAY[0]);
if ($Q_COUNT > 1) {
$Q_PARAM['data'] = $Q_ARRAY[1];
}
}
//判断模块是否存在并引入
$CON_FILE = 'modules/'.$Q_PARAM['controller'].'.php';
if (file_exists($CON_FILE)) {
require_once($CON_FILE);
}
else {
die('Controller not found'); //模块未找到
}
?>
目录结构ROOT
├─ index.php
│
├─ lib
│ └─ common.class.php
│
└─ modules
├─ controller1.php
└─ controller2.php
补充说明