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
IIS下配置Php+Mysql+zend的图文教程
Dec 08 PHP
Joomla下利用configuration.php存储简单数据
May 19 PHP
基于php实现长连接的方法与注意事项的问题
May 10 PHP
利用yahoo汇率接口实现实时汇率转换示例 汇率转换器
Jan 14 PHP
YII中assets的使用示例
Jul 31 PHP
简单介绍win7下搭建apache+php+mysql开发环境
Aug 06 PHP
PHP读取mssql json数据中文乱码的解决办法
Apr 11 PHP
php封装的smartyBC类完整实例
Oct 19 PHP
Laravel学习教程之request validation的编写
Oct 25 PHP
PHP给前端返回一个JSON对象的实例讲解
May 31 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
Apr 13 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+mysql 采用ajax技术的 省 市 地 3级联动无刷新菜单 源码
2006/12/16 PHP
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
模拟jQuery ajax服务器端与客户端通信的代码
2011/03/28 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
JS简单实现多级Select联动菜单效果代码
2015/09/06 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
JavaScript知识点总结(五)之Javascript中两个等于号(==)和三个等于号(===)的区别
2016/05/31 Javascript
深入理解vue中的$set
2017/06/01 Javascript
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
小程序实现人脸识别功能(百度ai)
2018/12/23 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
你不知道的SpringBoot与Vue部署解决方案
2020/11/09 Javascript
[01:14:41]DOTA2-DPC中国联赛定级赛 iG vs Magma BO3第一场 1月8日
2021/03/11 DOTA
Python实现生成随机数据插入mysql数据库的方法
2017/12/25 Python
在Python 中同一个类两个函数间变量的调用方法
2019/01/31 Python
django celery redis使用具体实践
2019/04/08 Python
纯python进行矩阵的相乘运算的方法示例
2019/07/17 Python
Python高级property属性用法实例分析
2019/11/19 Python
Python 余弦相似度与皮尔逊相关系数 计算实例
2019/12/23 Python
Python3 A*寻路算法实现方式
2019/12/24 Python
Django权限设置及验证方式
2020/05/13 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
html5教程制作简单画板代码分享
2013/12/04 HTML / CSS
米兰网婚纱礼服法国网上商店:Milanoo法国
2016/08/20 全球购物
Under Armour安德玛中国官网:美国高端运动科技品牌
2018/03/09 全球购物
100%羊绒:NakedCashmere
2020/08/26 全球购物
港湾网络笔试题
2014/04/19 面试题
大学生表扬信范文
2014/01/09 职场文书
十八届三中全会学习方案
2014/02/16 职场文书
活动总结新闻稿
2014/08/30 职场文书
法定代表人授权委托书范本
2014/10/07 职场文书
2014年党员发展工作总结
2014/12/02 职场文书
圣诞节开幕词
2015/01/29 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
MySQL串行化隔离级别(间隙锁实现)
2022/06/16 MySQL