php url路由映射类,URL到类方法的映射例子

摘要:本章主要学习了MVC的架构原理,并通过配置简单的路由,实现类到路由方法的映射,代码如下:<?php

/**路由类*/

namespace pong;

class Route

{

protected $route=[];

protected $passIn

本章主要学习了MVC的架构原理,并通过配置简单的路由,实现类到路由方法的映射,代码如下:<?php

/**路由类*/

namespace pong;

class Route

{

protected $route=[];

protected $passInfo=[];

protected $params=[];

public function __construct($route)

{

$this->route=$route;

}

/**

* @param string $queryStr  链接参数

* @return $this            当前类的实例

*/

public  function  parse($queryStr='')

{

//去除字符串左右的/,并将参数全部转为小写

$queryStr=strtolower(trim($queryStr,'/'));

//通过/把字符串转成数组

$queryArr=explode('/',$queryStr);

//数组过滤掉空字符

$queryArr=array_filter($queryArr,function($value){

return trim($value)!='';

},ARRAY_FILTER_USE_BOTH);

//判断数组中有几个参数

switch (count($queryArr))

{

case 0:

$this->passInfo = $this->route;

break;

case 1:

$this->passInfo['module']=$queryArr[0];

break;

case 2:

$this->passInfo['module']=$queryArr[0];

$this->passInfo['controller']=$queryArr[1];

break;

case 3:

$this->passInfo['module']=$queryArr[0];

$this->passInfo['controller']=$queryArr[1];

$this->passInfo['action']=$queryArr[2];

break;

default:

$this->passInfo['module']=$queryArr[0];

$this->passInfo['controller']=$queryArr[1];

$this->passInfo['action']=$queryArr[2];

//从第四个元素开始遍历,即过滤掉路由的信息

for($i=3;$i

{

if(isset($queryArr[$i+1]))

{

$this->params[$queryArr[$i]]=$queryArr[$i+1];

}

}

break;

}

//返回当前对象

return $this;

}

public function  dispatch()

{

//模块名

$module = $this->passInfo['module'];

//控制器名

$controller='\app\\' .$module . '\controller\\' .  ucfirst($this->passInfo['controller']) ;

//操作

$action= $this->passInfo['action'];

//如果找不到,重新返回根目录

if(!method_exists($controller,$action))

{

header('location:/');

}

return call_user_func_array([new $controller,$action],$this->params);

}

}

//测试

$config=require __DIR__.'/Config.php';

$route=new Route($config['route']);

//测试请求分发

require __DIR__ . '/../app/admin/controller/Index.php';

print_r($route->parse($_SERVER['QUERY_STRING'])->dispatch()) ;

Config.php<?php

/**

* 配置文件

*/

return [

//应用配置

'app'=>[

//调试开关

'debug'=>true

],

//路由配置

'route'=>[

//默认模块

'module'=>'admin',

//默认控制器

'controller'=>'Index',

//默认操作

'action'=>'index'

],

'db'=>[

// 数据库类型

'database_type' => 'mysql',

// 默认数据库名称

'database_name' => 'frame',

// 默认主机名

'server' => 'localhost',

// 默认用户名

'username' => 'root',

// 用户密码

'password' => 'root',

// 编码

'charset' => 'utf8',

//端口

'port' => 3306,

]

];

Index.php<?php

namespace app\admin\controller;

class Index

{

public function hello($name,$age)

{

return '我是调用的方法。姓名:' . $name . ',年龄:' . $age;

}

}

调用地址:

域名/pong/route.php?/admin/Index/Hello/name/pong/age/26

效果图:

bd62e0ec7145ccb741f0f860e150d2bf.png

批改老师:天蓬老师批改时间:2019-01-24 10:44:17

老师总结:基本上是照抄的教学代码, 不知你是否真的明白了, 应该写上你的理解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值