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 相关文章推荐
输出控制类
Oct 09 PHP
PHP4实际应用经验篇(6)
Oct 09 PHP
PHP下打开URL地址的几种方法小结
May 16 PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
基于PHP文件操作的详细诠释
Jun 21 PHP
解析PHP中$_FILES的使用以及注意事项
Jul 05 PHP
php提取字符串中网站url地址的方法
Dec 03 PHP
smarty模板判断数组为空的方法
Jun 10 PHP
详解PHP中foreach的用法和实例
Oct 25 PHP
ThinkPHP框架实现的MySQL数据库备份功能示例
May 24 PHP
yii2 上传图片的示例代码
Nov 02 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
回帖脱衣服的图片实现代码
2014/02/15 PHP
解决phpcms更换javascript的幻灯片代码调用图片问题
2014/12/26 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php获取用户真实IP和防刷机制的实例代码
2018/11/28 PHP
常用的JavaScript验证正则表达式汇总
2013/11/26 Javascript
js二维数组排序的简单示例代码
2014/01/24 Javascript
jQuery Validate 验证,校验规则写在控件中的具体实例
2014/02/27 Javascript
js+html5实现canvas绘制简单矩形的方法
2015/06/05 Javascript
Javascript实现的Map集合工具类完整实例
2015/07/31 Javascript
基于WebUploader的文件上传js插件
2016/08/19 Javascript
JavaScript SHA512加密算法详细代码
2016/10/06 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
Vuejs 页面的区域化与组件封装的实现
2017/09/11 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
C#程序员入门学习微信小程序的笔记
2019/03/05 Javascript
原生js实现抽奖小游戏
2019/06/27 Javascript
11个Javascript小技巧帮你提升代码质量(小结)
2020/12/28 Javascript
python的id()函数介绍
2013/02/10 Python
Python简单连接MongoDB数据库的方法
2016/03/15 Python
Python中%r和%s的详解及区别
2017/03/16 Python
Python基于FTP模块实现ftp文件上传操作示例
2018/04/23 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
Python scrapy爬取小说代码案例详解
2020/07/09 Python
利用CSS3实现文本框的清除按钮相关的一些效果
2015/06/23 HTML / CSS
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
三年级小学生评语
2014/04/22 职场文书
《天游峰的扫路人》教学反思
2014/04/25 职场文书
幼儿发展评估方案
2014/06/11 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
大学生赌博检讨书
2014/09/22 职场文书
教师学习八项规定六项禁令思想汇报
2014/09/27 职场文书
毕业论文答辩开场白和答辩技巧
2015/05/27 职场文书
小学生手册家长意见
2015/06/03 职场文书
有关朝花夕拾的读书笔记
2015/06/29 职场文书
Springboot中如何自动转JSON输出
2022/06/16 Java/Android