PHP路由模式Path_Info模式

转载 2016年05月30日 16:40:38
  1. <?php

    /*

     * 小黄牛PHP博客 - 基于单一入口PHP框架Path_Info模式路由功能实现

     * 作者:冯俊豪

     * 什么是PHP - Path_Info模式路由?请看如下URL地址:

     * http://www.im158.com/index.php/index-showlist.html

     * 从如上地址中我们无法再像普通路由那样“直观”的看见C和M的存在,只能在index.php后面看到两个用-符号分割的“伪参数”,控制器(controllers)和方法(method)

     * Path_Info模式路由的关键就在于,我们如果从URL中提炼出C和M的存在,然后返回给GET让路由器去进行解析

     * 就像上面的URL,当前访问的是Index控制器下的Showlist方法,并进行了伪后缀伪装

     * 话不多说,我们立刻来看下代码吧

     * 测试URL如下:

     * http://127.0.0.1/   访问默认控制器和方法

     * http://127.0.0.1/index.php/Ceshi-Showlist.html   访问Ceshi控制器下的Showlist方法  

    */

  2. //控制器基类

    class Controller {

    //Path_Info路由需要以下的四个成员来初始化Index首页模板

    private $controller = 'index'; //默认控制器

    private $method     = 'index'; //默认方法

    private $url_split  = '-';     //路由分隔符

    private $url_suffix = '.html'; //URL后缀名

    //获取并自动加载对应的控制器、方法

    public function Curl() {

    //解析URL

    $this->Analysis();

    //如果参数C存在则获得控制器名,不存在则加载默认控制器

    $Controller = !empty($_GET['c']) ? $_GET['c'] : $this->controller;  //获得当前控制器名称

    $Controller .= 'Controller';                                        //加上控制器后缀名

    //同上

    $Method     = !empty($_GET['m']) ? $_GET['m'] : $this->method;      //获得当前方法名称

    //自动加载控制器

    $instance = new $Controller();

    //访问对应的操作方法

    $instance->$Method();

    }

    //需要用这个方法来解析URL,并对C和M重新赋值

    public function Analysis(){

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

    //$_SERVER['PATH_INFO']URL地址中文件名后的路径信息, 不好理解, 来看看例子

    //比如你现在的URL是 http://www.im158.com/index.php 那么你的$_SERVER['PATH_INFO']就是空的

    //但是如果URL是 http://www.im58.com/index.php/abc/123

    //现在的$_SERVER['PATH_INFO']的值将会是 index.php文件名称后的内容 /abc/123/

    $path    = trim($_SERVER['PATH_INFO'],$this->url_split); //删除最末尾的分隔符

    $paths   = explode($this->url_split, $path);             //将URL分割成数组

    //如果参数C存在则获得控制器名,不存在则加载默认控制器

    $Controller = str_replace('/','',$paths[0]);     //获得C参数,并将左侧的/符号删除

    $Method     = str_replace($this->url_suffix,'',$paths[1]); //获得M参数,并将右侧的伪后缀删除

    //这里对控制器重新赋值

    $_GET['c'] = $Controller;

    //同上

    $_GET['m'] = $Method;

    }

    }

    }

  3. //测试控制器-Index

    class IndexController{

    public function Index(){

    echo '这是IndexController控制器下的Index方法';

    }

    public function Showlist(){

    echo '这是IndexController控制器下的Showlist方法';

    }

    //测试控制器-Ceshi

    class CeshiController{

    public function Index(){

    echo '这是CeshiController控制器下的Index方法';

    }

    public function Showlist(){

    echo '这是CeshiController控制器下的Showlist方法';

    }

    //实例化控制器

    $res = new Controller();

    //加载路由监控

    $res ->curl();


PHP开启PATH_INFO访问

Apache2.2.22开启PathInfo模式的支持 小柒 小柒 2013-03-12 18:46:59 昨天新配置了一个PHP集成开发环境,安装完后,把项目放到Apache服务器的www目录下...
  • zhaojindong33
  • zhaojindong33
  • 2017年03月29日 17:02
  • 4291

PHP中的$_SERVER['PATH_INFO']

PHP中的全局变量$_SERVER['PATH_INFO']是一个很有用的参数,众多的CMS系统在美化自己的URL的时候,都用到了这个参数。 对于下面这个网址: http://www.te...
  • bingqingsuimeng
  • bingqingsuimeng
  • 2014年03月03日 16:06
  • 7417

$_SERVER['PATH_INFO']

PHP中的全局变量$_SERVER['PATH_INFO']是一个很有用的参数,众多的CMS系统在美化自己的URL的时候,都用到了这个参数。 对于下面这个网址: http://www.te...
  • dabao1989
  • dabao1989
  • 2015年05月20日 15:25
  • 1835

php 使用pathinfo(), parse_url(), basename()解析URL

本文章向大家介绍解析URL的三种方法,分别为pathinfo()方法、parse_url()方法和basename()方法。每个方法都列举了一个实例,通过实例更容易理解这三个函数的使用方法和技巧,需要...
  • wuxiaopeng_1986
  • wuxiaopeng_1986
  • 2016年10月08日 12:51
  • 1235

PHP简单实现MVC框架路由功能模式

说到使用PHP进行网站开发,自然离不开各种PHP的开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等等,让我们的开发更为快捷方便。但是很多人只是会使用框架,却从来不去了解框架的内部...
  • Zhihua_W
  • Zhihua_W
  • 2016年11月15日 09:11
  • 4803

php url路由入门实例

一、什么是php的路由机制 1、路由机制就是把某一个特定形式的URL结构中提炼出来系统对应的参数。举个例子,如:http://main.test.com/article/1  其中:/article...
  • zll105847174
  • zll105847174
  • 2016年11月23日 11:28
  • 3914

基于原生PHP的路由分配实现

对于由原生PHP写成的独立PHP框架,利用单一入口文件实现路径的访问。这时我们会遇到的首要问题是:文件的相互包含,其次就是路由分配。当我们不利用成熟的PHP框架进行web开发时,我们就会发现上述两个问...
  • helencoder
  • helencoder
  • 2016年07月29日 16:07
  • 8708

一个php简单的框架实现,仅实现了简单路由层

这是一个简单的php框架的实现代码,其他框架原理大致与此相同的。
  • shi_yi_fei
  • shi_yi_fei
  • 2017年01月23日 17:19
  • 2023

简单实现PHP路由和类自动加载

项目目录如下 入口文件index.php 
  • well1219
  • well1219
  • 2017年05月27日 16:38
  • 660

PHP搭建自己的web框架-路由

路由指URL路由,通过解析URL参数找到执行的(控制器的)方法。 通过URL,能找到目标类和目标方法,通常使用pathinfo或参数。比如: pathinfo :http://...
  • rariki
  • rariki
  • 2016年01月03日 14:12
  • 2919
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP路由模式Path_Info模式
举报原因:
原因补充:

(最多只允许输入30个字)