当前位置:首页文章首页 IT学院 PHP

关于php url路由的实现

作者:  来源:  发布时间:2011-5-20 15:09:52  点击:

这篇文章提供分享给大家,是关于php url路由的实现,下面的详细的解析,希望对各位有所帮助。

1.符合规则定义的伪静态访问路径解析

对于"test.php/user/lists/normal/id/2.html" 可解析为
control = user,action = lists,filter = normal,order = id,curPage = 3

对于"test.php/users/lists.html" 可解析为
control = user,action = lists,filter = all,order = '',curPage = 1 可取得规则定义中的默认值

2.不符合规则定义的伪静态路径解析

action,control 不符合规则
对于"test.php/users/lists/all/id1/1.html" 报错
试图访问不存在的页面

不符合匹配模式
对于"test.php/user/lists/all/id1/1.html" 可解析为
control = user,action = lists,filter = all,order = '',curPage = 1
可取得不符合匹配模式项目的默认值,上例 order 不符合匹配模式

定义路由规则时可以定义默认值,当在pathinfo中找不到匹配的值,能取得默认值

<?php

// url 路由规则定义

$urlRule = array(

    'user' => array(            // control

        'lists' => array(       // action

            //'名称'    => '默认值,值模式匹配'

            'filter'    => 'all,^(all|normal|admin)$',

            'order'     => ',^-?[a-zA-Z_]+$',

            'curPage'   => '1,^[0-9]+$',

          ),

    ),

);

function parseUrl(){

        $queryString = array();

        $GLOBALS['control'] = 'index';

        $GLOBALS['action'] = 'index';

        if (isset($_SERVER['PATH_INFO'])){

                //获取  pathinfo

                $aPathInfo = explode('/', substr($_SERVER['PATH_INFO'], 1, strrpos($_SERVER['PATH_INFO'], '.')-1));

                // 获取 control

                $GLOBALS['control'] = $aPathInfo[0];

                array_shift($aPathInfo);

                // 获取 action

                $GLOBALS['action'] = (isset($aPathInfo[0]) ? $aPathInfo[0] : 'index');

                array_shift($aPathInfo);

                // 获取 入口文件名

                $GLOBALS['PHP_SELF'] = str_replace($_SERVER['PATH_INFO'], '', $_SERVER['PHP_SELF']);

                $queryString = $aPathInfo;

        }

        parseQueryString($queryString);

}

function parseQueryString(array$aQueryString){

        $queryString = array();

        // control 与 action 为默认值时 

        if ($GLOBALS['control'] == 'index' && $GLOBALS['action'] == 'index'){

                $GLOBALS['queryString'] = $queryString;

                return true;

首页 上一页 [1] [2] [3]  下一页 尾页

文章评论

软件按字母排列: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z