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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
用PHP+MySql编写聊天室
Oct 09 PHP
php实现单链表的实例代码
Mar 22 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
浅析php与数据库代码开发规范
Aug 08 PHP
限制ckeditor上传图片文件大小的方法
Nov 15 PHP
Yii框架在页面输出执行sql语句以方便调试的实现方法
Dec 24 PHP
php封装db类连接sqlite3数据库的方法实例
Dec 19 PHP
PHP设计模式之工厂模式(Factory Pattern)的讲解
Mar 21 PHP
php数组和链表的区别总结
Sep 20 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 PHP
如何在PHP中使用AES加密算法加密数据
Jun 24 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
玩家交还《星际争霸》原始码光盘 暴雪报以厚礼
2017/05/05 星际争霸
PHP面向对象的使用教程 简单数据库连接
2006/11/25 PHP
PHP中的日期处理方法集锦
2007/01/02 PHP
dedecms中显示数字验证码的修改方法
2007/03/21 PHP
php创建sprite
2014/02/11 PHP
PHP静态文件生成类实例
2014/11/29 PHP
php使用for语句输出三角形的方法
2015/06/09 PHP
PHP创建word文档的方法(平台无关)
2016/03/29 PHP
PHP共享内存使用与信号控制实例分析
2018/05/09 PHP
理解Javascript_03_javascript全局观
2010/10/11 Javascript
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
当自定义数据属性为json格式字符串时jQuery的data api问题探讨
2013/02/18 Javascript
Extjs优化(一)删除冗余代码提高运行速度
2013/04/15 Javascript
JS去除字符串两端空格的简单实例
2013/12/27 Javascript
jquery 取子节点及当前节点属性值的方法
2014/08/24 Javascript
JavaScript onkeypress事件入门实例(按下或按住一个键盘按键)
2014/10/17 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
js实现网页多级级联菜单代码
2015/08/20 Javascript
JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)
2015/12/03 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
jQuery操作dom实现弹出页面遮罩层(web端和移动端阻止遮罩层的滑动)
2016/08/25 Javascript
JavaScript栈和队列相关操作与实现方法详解
2018/12/07 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
浅谈vue项目利用Hbuilder打包成APP流程,以及遇到的坑
2020/09/12 Javascript
Vue基于localStorage存储信息代码实例
2020/11/16 Javascript
[45:32]Liquid vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
python requests 使用快速入门
2017/08/31 Python
python实现在线翻译功能
2020/03/03 Python
15个Pythonic的代码示例(值得收藏)
2020/10/29 Python
Python txt文件如何转换成字典
2020/11/03 Python
税务专业毕业生自荐信
2013/11/10 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
致百米运动员广播稿5篇
2014/10/13 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
nginx 配置指令之location使用详解
2022/05/25 Servers