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.ini 中文版
Oct 28 PHP
php 文件夹删除、php清除缓存程序
Aug 25 PHP
让PHP以ROOT权限执行系统命令的方法
Feb 10 PHP
php define的第二个参数使用方法
Nov 04 PHP
PHP大转盘中奖概率算法实例
Oct 21 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
Zend Framework教程之资源(Resources)用法实例详解
Mar 14 PHP
thinkphp验证码的实现(form、ajax实现验证)
Jul 28 PHP
php is_writable判断文件是否可写实例代码
Oct 13 PHP
PHP+JQUERY操作JSON实例
Mar 23 PHP
PHP Pipeline 实现中间件的示例代码
Apr 26 PHP
Yii中特殊行为ActionFilter的使用方法示例
Oct 18 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动态生成虚拟现实VRML网页
2006/10/09 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
PHP实现简单汉字验证码
2015/07/28 PHP
用php定义一个数组最简单的方法
2019/10/04 PHP
javascript 函数式编程
2007/08/16 Javascript
javascript与webservice的通信实现代码
2010/12/25 Javascript
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
使用jQuery将多条数据插入模态框的实现代码
2014/10/08 Javascript
JavaScript代码实现图片循环滚动效果
2020/03/19 Javascript
js自定义Tab选项卡效果
2017/06/05 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
webpack4 SplitChunks实现代码分隔详解
2019/05/23 Javascript
Async/Await替代Promise的6个理由
2019/06/15 Javascript
Python3 循环语句(for、while、break、range等)
2017/11/20 Python
python调用百度语音识别实现大音频文件语音识别功能
2018/08/30 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
Django框架models使用group by详解
2020/03/11 Python
Python连接HDFS实现文件上传下载及Pandas转换文本文件到CSV操作
2020/06/06 Python
在 Python 中使用 MQTT的方法
2020/08/18 Python
CSS3 绘制BMW logo实的现代码
2013/04/25 HTML / CSS
css3实例教程 一款纯css3实现的环形导航菜单
2014/10/20 HTML / CSS
css3 中的新特性加强记忆详解
2016/04/16 HTML / CSS
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
岗位职责的含义
2013/11/17 职场文书
九年级数学教学反思
2014/02/02 职场文书
大学生毕业求职自荐书范文
2014/02/04 职场文书
运动会邀请函范文
2014/02/06 职场文书
白酒市场营销方案
2014/02/25 职场文书
具结保证书
2015/01/17 职场文书
关于上班时间调整的通知
2015/04/23 职场文书
2015年银行信贷员工作总结
2015/05/19 职场文书
浅谈redis整数集为什么不能降级
2021/07/25 Redis
Vue2.0搭建脚手架
2022/03/13 Vue.js