<?php
/**
 * 路由
 * @author 角度 QQ:1286522207
 *
 */
class Dispatcher extends Action {
    private $url;
    private $config;
    function __construct(){
        $this->routerCheck();
    }
    /**
     * 路由检测
     */
    function routerCheck(){
        global $config;
        $this->config=$config;
        $suffix=$this->config['URL_HTML_SUFFIX'];
        //  获取当前路由参数对应的变量
        $paths = (array_filter(explode('/',trim(preg_replace('/\.'.$suffix.'$/','',$_SERVER['PHP_SELF']),'/'))));
        if ($this->config['URL_PATHINFO_MODEL']==1){
            define('__URL__','/'.$paths[0].'/');
        }elseif ($this->config['URL_PATHINFO_MODEL']==2){
            define('__URL__','/');
        }
        if (empty($paths[1])){
            $paths[1]='index';
        }
        if (empty($paths[2])){
            $paths[2]='index';
        }
        if (empty($paths[3])){
            $paths[3]='index';
        }
        $this->Action($paths);
    }
    /**
     * 实例化操作
     */
    function Action($paths){
        if ($paths[1]==$this->config['TMPL_ADMIN_PATH']){
            include APP_PATH.'/'.$this->config['TMPL_ADMIN_PATH'].'/commonAction.php';
            $A=APP_PATH.'/'.$paths[1]."/".$paths[2]."Action.class.php";
            $b=$paths[2];
            @$c=$paths[3];
        }else {
            $A=APP_PATH."/Action/".$paths[1]."Action.class.php";
            $b=$paths[1];
            $c=$paths[2];
        }
        if (is_file($A)){
            include $A;
            $action=$b."Action";
            @$controller = new $action();
            if(method_exists($controller, $c)){
                $controller->$c();
            }else {
                exit('方法不在');
            }
        }else {
            exit('类不在');
        }
 
    }
    /**
     * 解析为$_GET全局变量
     */
    function pathinfo(){
        $pathinfo=(array_filter(explode('/',$this->url)));
        $count=count($pathinfo);
        for($foo=1;$foo<$count;$foo+=2){
            $_GET[$pathinfo[$foo]]=($foo+2)==$count?array_shift(explode('.',$pathinfo[$foo+1])):$pathinfo[$foo+1];
        }
    }
    /**
     * 重排数组
     * @param unknown_type $array
     */
    function Reorder($array){
        $i=0;
        foreach ($array as $row){
            $a[$i++]=$row;
        }
        return $a;
    }
    function __destruct(){
         
    }
}

PHP路由代码的更多相关文章

  1. 数据库分库分表(sharding)系列(五) 一种支持自由规划无须数据迁移和修改路由代码的Sharding扩容方案

    作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...

  2. nodejs 用http模块搭建的服务器的路由,以及路由代码的重构过程

    我们打开浏览器浏览网页时,点击上面不同的模块,地址栏中的路由会发生相应的变化,从而,浏览器向服务器发起请求的内容也会发生改变,那么服务端,是如何来做的呢? 服务端也是,通过路由来做出不同的响应的,我们 ...

  3. DB 分库分表(5):一种支持自由规划无须数据迁移和修改路由代码的 Sharding 扩容方案

    作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一 ...

  4. node的function函数和路由代码的小例子

    1.node事件循环 事件: const events=require("events"); emt=new events.EventEmitter(); function eve ...

  5. Vue总结第五天:vue-router (使用模块化(创建Vue组件)机制编程)、router-link 标签的属性、路由代码跳转、懒加载、路由嵌套(子路由)、路由传递数据、导航守卫)

    Vue总结第五天:vue-router ✿ 路由(器)目录: □  vue中路由作用 □  vue-router基本使用 □  vue-router嵌套路由 □  vue-router参数传递 □  ...

  6. 利用systemtap学习Linux路由代码

    http://bbs.chinaunix.net/thread-4090162-1-1.html 一.为什么要这样做读kernel route子系统代码,当我弄懂了数据结构之间的关系以及控制流程后,心 ...

  7. 嵌入式 hi3518平台增加路由代码

    <span style="font-family:Courier New;"> /********************************** (C) COPY ...

  8. 《精通MVC5.0》路由笔记

    MVC使用路由系统处理请求的URL.路由系统主要功能 检查请求的URL,并理解该URL对应的控制器和方法 生成URL地址 在MVC程序中有两种方式创建路由:convention-based routi ...

  9. laravel route路由

    基本路由 您的应用程序的绝大多数路由将在 app/routes.php 文件中定义.Laravel 中最简单的路由由一个 URI 和一个闭包调用组成. 基本 GET 路由 代码如下: Route::g ...

随机推荐

  1. Delphi 模式窗体返回值ModalResult的使用方法及注意事项

    1.基础知识简介: ModalResult是指一个模式窗体(form.showmodal)的返回值,一般用于相应窗体上按钮的ModalResult属性: 显示完窗体(关闭)后,会返回此属性预设的值做为 ...

  2. 新浪云部署java web程序 注意事项

    在新浪云新手指南里有部署java的示例,但是对一个新手来说难免会有一些地方犯错,折腾了好长时间才把自己的java web部署到了新浪云.这里主要写一些我遇到的问题与第一次使用新浪云的朋友分享一下. 首 ...

  3. Springboot2.x+shiro+redis(Lettuce)整合填坑

    主要记录关键和有坑的地方 前提: 1.SpringBoot+shiro已经集成完毕,如果没有集成,先查阅之前的Springboot2.0 集成shiro权限管理 2.redis已经安装完成 3.red ...

  4. POJ1422:Air Raid——题解

    http://poj.org/problem?id=1422 题目大意:n个点m条有向边,每条边只能走一次,往点上放人让他们走遍所有边,问至少要多少人. —————————————————————— ...

  5. 洛谷 P2024 [NOI2001]食物链 解题报告

    P2024 [NOI2001]食物链 题目描述 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个 ...

  6. React的setState执行机制

    1. setState基本特点 1. setState是同步执行的 setState是同步执行的,但是state并不一定会同步更新 2. setState在React生命周期和合成事件中批量覆盖执行 ...

  7. Apache 403 错误解决方法-让别人可以访问你的服务器(转)

    有一次做好了一个效果放在自己电脑的服务器上,让同学查看(同处于校园网中),却不知apache一直显示403 错误,对方没有权限访问,我知道这应该是配置文件httpd.conf中的问题,网上搜了一下其他 ...

  8. [dhcpd]清除dhcp缓存

    修改了dhcp的default-lease-time && max-lease-time 清除缓存: rm /var/lib/dhcpd.leases~ echo "&quo ...

  9. 【题解】互不侵犯 SCOI 2005 BZOJ 1087 插头dp

    以前没学插头dp的时候觉得这题贼难,根本不会做,学了才发现原来是一裸题. 用二进制表示以前的格子的状态,0表示没放国王,1表示放了国王. 假设当前位置为(x,y),需要记录的是(x-1,y-1)至(x ...

  10. C++派生类继承的理解

    #include<iostream> using namespace std; class Base{ public: Base() { a=; cout<<"Bas ...