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
与数据库连接
Oct 09 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
解析在PHP中使用mysqli扩展库对mysql的操作
Jul 03 PHP
利用中国天气预报接口实现简单天气预报
Jan 20 PHP
PHP实现使用优酷土豆视频地址获取swf播放器分享地址
Jun 05 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
Nov 04 PHP
PHP扩展模块memcached长连接使用方法分析
Dec 24 PHP
smarty中常用方法实例总结
Aug 07 PHP
PHP二分查找算法示例【递归与非递归方法】
Sep 29 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
快速解决PHP调用Word组件DCOM权限的问题
Dec 27 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实现获取及设置用户访问页面语言类
2014/09/24 PHP
php查询mysql大量数据造成内存不足的解决方法
2015/03/04 PHP
中文输入法不触发onkeyup事件的解决办法
2014/07/09 Javascript
node.js中的path.resolve方法使用说明
2014/12/08 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
jQuery子窗体取得父窗体元素的方法
2015/05/11 Javascript
Ext JS框架中日期函数的用法及日期选择控件的实现
2016/05/21 Javascript
浅谈jquery点击label触发2次的问题
2016/06/12 Javascript
javascript用正则表达式过滤空格的实现代码
2016/06/14 Javascript
javascript prototype原型详解(比较基础)
2016/12/26 Javascript
详解node中创建服务进程
2017/05/09 Javascript
three.js加载obj模型的实例代码
2017/11/10 Javascript
js实现点赞按钮功能的实例代码
2020/03/06 Javascript
JS判断数组是否包含某元素实现方法汇总
2020/06/24 Javascript
python进程类subprocess的一些操作方法例子
2014/11/22 Python
Python实现将绝对URL替换成相对URL的方法
2015/06/28 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
使用Python实现微信拍一拍功能的思路代码
2020/07/09 Python
Jupyter Notebook 安装配置与使用详解
2021/01/06 Python
韩国女装NO.1网店:STYLENANDA
2016/09/16 全球购物
美国Rue La La闪购网站:奢侈品、中高档品牌限时折扣
2016/10/19 全球购物
eDreams德国:南欧领先的在线旅游公司
2020/12/07 全球购物
PHP如何自定义函数
2016/09/16 面试题
小学毕业感言50字
2014/02/16 职场文书
运动会800米加油稿
2014/02/22 职场文书
小学班干部竞选演讲稿
2014/04/24 职场文书
森林病虫害防治方案
2014/06/02 职场文书
委托书的格式
2014/08/01 职场文书
法院反腐倡廉心得体会
2014/09/09 职场文书
研究生简历自我评价范文
2014/09/13 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
煤矿安全保证书
2015/02/27 职场文书
钱学森观后感
2015/06/04 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
2016年学校党支部公开承诺书
2016/03/25 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android