PHP路由代码

<?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(){

        

    }

}

时间: 2024-11-14 12:48:34

PHP路由代码的相关文章

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

作为一种数据存储层面上的水平伸缩解决方案,数据库Sharding技术由来已久,很多海量数据系统在其发展演进的历程中都曾经历过分库分表的Sharding改造阶段.简单地说,Sharding就是将原来单一数据库按照一定的规则进行切分,把数据分散到多台物理机(我们称之为Shard)上存储,从而突破单机限制,使系统能以Scale-Out的方式应对不断上涨的海量数据,但是这种切分对上层应用来说是透明的,多个物理上分布的数据库在逻辑上依然是一个库.实现Sharding需要解决一系列关键的技术问题,这些问题主

利用systemtap学习Linux路由代码

http://bbs.chinaunix.net/thread-4090162-1-1.html 一.为什么要这样做读kernel route子系统代码,当我弄懂了数据结构之间的关系以及控制流程后,心里还是不妥贴,总有一种“纸上得来终觉浅,绝知此事要躬行”的感觉.此时,systemtap能起大作用. 二.准备工作安装systemtap, kernel, kernel-debuginfo, kernel-debuginfo-common等.uname -r2.6.38.6-26.rc1.fc15.

简单的路由代码封装

package main import ( "github.com/gin-gonic/gin" "topic.jtthink.com/src" ) func main() { router := gin.Default() v1 := router.Group("/v1/topics") { v1.GET("", src.GetTopicList) v1.GET("/:topic_id", src.Get

CCNP路由实验之八 路由重发布

CCNP路由实验之八 路由重发布 在前面几个实验,已经学习了静态路由和动态路由.现在,我们要掌握如何使它们在一个网络中融合,即路由重发布.路由重分布可以实现多种路由协议之间共享路由信息并进行路由信息交换,使得同一个互联网络中高效地支持多种路由协议提供了可能.执行路由重分布的路由器被称为边界路由器.因为他们位于两个或多个自治系统的边界上. 路由重分布时,计量单位和管理距离是必须要考虑的因素.每一种路由协议都有自己的度量标准,所以在进行重分布时必须转换度量标准,使得它们兼容.种子度量值(Seed M

最新的ES 5.0路由算法底层实现

http://www.cnblogs.com/bonelee/p/6078947.html 里分析了ES bulk实现,其中路由代码: ShardId shardId = clusterService.operationRouting().indexShards(clusterState, concreteIndex, request.id(), request.routing()).shardId(); 其实现: https://github.com/elastic/elasticsearch

AngularJS测试二 jasmine测试路由 控制器 过滤器 事件 服务

测试应用 1.测试路由 我们需要检测路由是否在运作,是否找到了,或者是404了.我们要确认路由事件触发了,预期的模板是否真的加载了.既然路由会改变页面的地址(URL)和页面内容,我们需要检测路由是否被加载了,页面是否找到了,在这中间发生了什么. 一段简单的路由代码: angular.module('myApp', ['ngRoute']) .config(function($routeProvider) { $routeProvider .when('/', { templateUrl: 'vi

l路由子系统——Scope

Scope Scope类似作用域的概念.路由和IP地址可以指定Scope,用来告诉内核它们在那些情况下是有意义的,是可以被使用的. Scope分为两种:路由的Scope 和 IP地址的Scope 路由的Scope:表示到目的网络的距离. IP地址的Scope: 表示该IP地址到达本地主机有多远. 常用的Scope IP地址常用的Scope 主机:表示该地址只用于主机的内部通信.例如:127.0.0.1 链路:表示地址尽在局域网内部有意义(链路层互联),如子网广播地址 全域:表示地址可以在任何地方

Magento路由分发过程解析(二):Standard路由对象(转)

本文主要关注Magento的standard路由对象中的Mage_Core_Controller_Varien_Router_Standard::match()方法,该方法在前端控制器中调用,主要用来检查当前请求的URL地址,并决定匹配的模块,控制器以及方法,并且最后调用控制器分发该方法. 对于在上篇文章前端控制器循环所有的路由器来说,该方法完成了以下任务, 路由对象提供match()方法,并检测请求对象,如果匹配,则该路由对象获取该请求. 将请求标记为已分发. 设置请求对象. 假设没有找到匹配

laravel route路由

基本路由 您的应用程序的绝大多数路由将在 app/routes.php 文件中定义.Laravel 中最简单的路由由一个 URI 和一个闭包调用组成. 基本 GET 路由 代码如下: Route::get('/', function(){return 'Hello World';}); 基本 POST 路由 代码如下: Route::post('foo/bar', function(){return 'Hello World';}); 注册一个路由以响应所有 HTTP 方法 代码如下: Rout