PHP MVC框架路由学习笔记


Posted in PHP onMarch 02, 2016

提到PHP开发web,自然离不开开发框架,开发框架为我们提供了灵活的开发方式,MVC层分离,业务解耦等。。。

第一篇先来简单点的,说说MVC框架的路由功能。。。

一般的单入口框架路由都是这样的结构:

domain/index.php/classname/functionname/var1/var2

这里的index.php 就被称为入口文件。。。对于服务器而言,你这里访问的就只有index.php 后面调用的controller 和里面的方法,甚至传值都是在框架内部基于PHP层面实现的。

Talk is cheap, show you the code !!

首先,先建立好下面的文件结构

我们来动手试试,怎么才能访问到controllers里面的文件。。。

在index.php里面输入以下内容

print_r($_SERVER);

然后访问 以下地址试试。

yourdomain/index.php/class/function/var1

这里作者我是用本地环境的,我访问的地址是localhost/MVC/index.php/class/function/var1

我贴出最重要的2个变量

[REQUEST_URI] => /MVC/index.php/class/function/var1
[SCRIPT_NAME] => /MVC/index.php

其实路由最基本的原理就在这里:

通过这2个变量来提取url地址里的class 和 function,参数等,然后把class include进来,通过PHP的回调函数call_user_func_array 调用对应的function和传递相应的参数。

接下来上代码,读代码应该比我写的易懂。哈哈~~

index.php 的内容如下

<?php 
# 定义application路径 
define(‘APPPATH', trim(__DIR__,'/')); 
# 获得请求地址 
$root = $_SERVER['SCRIPT_NAME']; 
$request = $_SERVER['REQUEST_URI']; 
$URI = array(); 
# 获得index.php 后面的地址 
$url = trim(str_replace($root, ”, $request), ‘/'); 
# 如果为空,则是访问根地址 
if (empty($url)) 
{ 
# 默认控制器和默认方法 
$class = ‘index'; 
$func = ‘welcome'; 
} 
else 
{ 
$URI = explode(‘/', $url); 
# 如果function为空 则默认访问index 
if (count($URI) < 2) 
{ 
$class = $URI[0]; 
$func = ‘index'; 
} 
else 
{ 
$class = $URI[0]; 
$func = $URI[1]; 
} 
} 
# 把class加载进来 
include(APPPATH . ‘/' . ‘application/controllers/' . $class . ‘.php'); 
#实例化 
$obj = new ucfirst($class); 
call_user_func_array( 
# 调用内部function 
array($obj,$func), 
# 传递参数 
array_slice($URI, 2) 
);

在application/controllers 里面添加下面2个文件

index.php 用于作为默认控制器

<?php 
class Index 
{ 
function welcome() 
{ 
echo ‘I am default controller'; 
} 
} 
?> 
hello.php
<?php 
class Hello 
{ 
public function index() 
{ 
echo ‘hello world'; 
} 
public function name($name) 
{ 
echo ‘hello ‘ . $name; 
} 
} 
?>

测试一下看看,能不能访问了。根据上面的路由结构。我们来试试

这个访问正常,正确调用了hello这个class内部的name方法,然后把参数barbery传递过去了。。。

再试试不输入function name,看看能不能默认调用index。。

答案也是可以的。。。

最后一个,访问root地址看看

也正确的映射到了默认控制器上。。。

ok,一个简单的MVC路由功能就完成了。。。

PHP 相关文章推荐
PHP.MVC的模板标签系统(一)
Sep 05 PHP
也谈php网站在线人数统计
Apr 09 PHP
修改Zend引擎实现PHP源码加密的原理及实践
Apr 14 PHP
eAccelerator的安装与使用详解
Jun 13 PHP
解析关于java,php以及html的所有文件编码与乱码的处理方法汇总
Jun 24 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
php中session过期时间设置及session回收机制介绍
May 05 PHP
简单谈谈PHP中的include、include_once、require以及require_once语句
Apr 23 PHP
PHP实现在windows下配置sendmail并通过mail()函数发送邮件的方法
Jun 20 PHP
PHP封装curl的调用接口及常用函数详解
May 31 PHP
php curl优化下载微信头像的方法总结
Sep 07 PHP
thinkPHP框架实现的简单计算器示例
Dec 07 PHP
深入浅析用PHP实现MVC
Mar 02 #PHP
解析WordPress中控制用户登陆和判断用户登陆的PHP函数
Mar 01 #PHP
编写PHP脚本清除WordPress头部冗余代码的方法讲解
Mar 01 #PHP
WordPress的文章自动添加关键词及关键词的SEO优化
Mar 01 #PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 #PHP
php编程每天必学之表单验证
Mar 01 #PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 #PHP
You might like
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP使用file_get_contents发送http请求功能简单示例
2018/04/29 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
PHP面向对象程序设计内置标准类,普通数据类型转为对象类型示例
2019/06/12 PHP
PHP中abstract(抽象)、final(最终)和static(静态)原理与用法详解
2020/06/05 PHP
JS 遮照层实现代码
2010/03/31 Javascript
javascript 动态修改样式和层叠样式表代码
2010/04/27 Javascript
JavaScript中通过闭包解决只能取得包含函数中任何变量最后一个值的问题
2010/08/12 Javascript
javascript读取xml实现javascript分页
2013/12/13 Javascript
jQuery针对各类元素操作基础教程
2014/08/29 Javascript
js实现最短的XML格式化工具实例
2015/03/12 Javascript
jQuery Validate验证框架经典大全
2015/09/23 Javascript
超漂亮的Bootstrap 富文本编辑器summernote
2016/04/05 Javascript
js实现的光标位置工具函数示例
2016/10/03 Javascript
微信小程序 常见问题总结(4058,40013)及解决办法
2017/01/11 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
如何开发出更好的JavaScript模块
2017/12/22 Javascript
JavaScript事件委托原理与用法实例分析
2018/06/07 Javascript
JS数组去重的6种方法完整实例
2018/12/08 Javascript
[04:19]完美世界携手游戏风云打造 卡尔工作室模型介绍篇
2013/04/24 DOTA
[01:15:15]VG VS EG Supermajor小组赛B组胜者组第一轮 BO3第二场 6.2
2018/06/03 DOTA
对Python3 * 和 ** 运算符详解
2019/02/16 Python
python3对拉勾数据进行可视化分析的方法详解
2019/04/03 Python
Python3.5装饰器典型案例分析
2019/04/30 Python
Jacobi迭代算法的Python实现详解
2019/06/29 Python
python实现连连看游戏
2020/02/14 Python
Python flask框架实现浏览器点击自定义跳转页面
2020/06/04 Python
Python爬虫实现自动登录、签到功能的代码
2020/08/20 Python
用python对excel查重
2020/12/07 Python
New Balance波兰官方商城:始于1906年,百年慢跑品牌
2017/08/15 全球购物
Elemis美国官网:英国的第一豪华护肤品牌
2018/03/15 全球购物
技术比武方案
2014/05/19 职场文书
物理分数没达标检讨书
2014/09/13 职场文书
《金钱的魔力》教学反思
2016/02/20 职场文书