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 相关文章推荐
全新的PDO数据库操作类php版(仅适用Mysql)
Jul 22 PHP
php分页示例分享
Apr 30 PHP
php代码审计比较有意思的例子
May 07 PHP
PHP判断表单复选框选中状态完整例子
Jun 24 PHP
PHP中提问频率最高的11个面试题和答案
Sep 02 PHP
PHP aes (ecb)解密后乱码问题
Jun 22 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
Dec 19 PHP
浅谈PHP正则中的捕获组与非捕获组
Jul 18 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
php注册系统和使用Xajax即时验证用户名是否被占用
Aug 31 PHP
PHP实现双链表删除与插入节点的方法示例
Nov 11 PHP
原生JS实现Ajax通过GET方式与PHP进行交互操作示例
May 12 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
php设置编码格式的方法
2013/03/05 PHP
PHP中VC6、VC9、TS、NTS版本的区别与用法详解
2013/10/26 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
常用参考资料(手册)下载或者链接
2006/07/22 Javascript
jQuery隔行变色与普通JS写法的对比
2013/04/21 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
javascript实现仿腾讯游戏选择
2015/05/14 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
jQuery Tags Input Plugin(添加/删除标签插件)详解
2016/06/20 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
微信小程序 wxapp导航 navigator详解
2016/10/31 Javascript
Vue.js组件tab实现选项卡切换
2020/03/23 Javascript
js微信分享实现代码
2020/10/11 Javascript
关于 angularJS的一些用法
2017/11/29 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
Node.js中,在cmd界面,进入退出Node.js运行环境的方法
2018/05/12 Javascript
js实现文件上传功能 后台使用MultipartFile
2018/09/08 Javascript
说说Vue.js中的functional函数化组件的使用
2019/02/12 Javascript
初学node.js中实现删除用户路由
2019/05/27 Javascript
利用原生JS实现data方法示例代码
2019/05/28 Javascript
JS立即执行的匿名函数用法分析
2019/11/04 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
SpringBoot在yml配置文件中配置druid的操作
2020/11/16 Javascript
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
分析运行中的 Python 进程详细解析
2019/06/22 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
聊聊python中的循环遍历
2020/09/07 Python
会计电算化专业应届大学生求职信
2013/10/22 职场文书
会计辞职信范文
2014/01/15 职场文书
志愿者活动总结
2014/04/28 职场文书
小学运动会演讲稿
2014/08/25 职场文书
朋友离别感言
2015/08/04 职场文书
成人成长感言如何写?
2019/08/16 职场文书