hiCasper

Truth or happiness,
never both.

一个PHP路由的简易实现

前言

最近自己搭建了API,但又觉得目录下面丢一堆文件夹很没有技术含量,就参照了MVC框架的思想,实现了一个简易的PHP路由。

实现

因为该框架是配合API使用,所以没有采用完整的MVC架构,模式如下:

example.com/index.php?controller/param1=xxx&param2=xxx

使用伪静态后:

example.com/controller/param1=xxx&param2=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

补充说明

本原创文章未经允许不得转载 | 当前页面:hiCasper » 一个PHP路由的简易实现

评论