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 相关文章推荐
图片存储与浏览一例(Linux+Apache+PHP+MySQL)
Oct 09 PHP
php SQL之where语句生成器
Mar 24 PHP
PHPMailer使用教程(PHPMailer发送邮件实例分析)
Dec 06 PHP
PHP设计模式之解释器模式的深入解析
Jun 13 PHP
php实现图形显示Ip地址的代码及注释
Jan 20 PHP
php网站被挂木马后的修复方法总结
Nov 06 PHP
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
Nov 20 PHP
thinkphp中session和cookie无效的解决方法
Dec 19 PHP
学习php设计模式 php实现适配器模式
Dec 07 PHP
前端必学之PHP语法基础
Jan 01 PHP
PHP命名空间namespace用法实例分析
Sep 27 PHP
PHP5.6读写excel表格文件操作示例
Feb 26 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
环境会对咖啡种植有什么影响
2021/03/03 咖啡文化
phpMyadmin 用户权限中英对照
2010/04/02 PHP
用php的ob_start来生成静态页面的方法分析
2011/03/09 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
php curl的深入解析
2013/06/02 PHP
PHP开发Apache服务器配置
2015/07/15 PHP
php使用pear_smtp发送邮件
2016/04/15 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
jQuery链式操作如何实现以及为什么要用链式操作
2013/01/17 Javascript
打印json对象的内容及JSON.stringify函数应用
2013/03/29 Javascript
按下回车键指向下一个位置的一个函数代码
2014/03/10 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
全面了解JavaScript的数据类型转换
2016/07/01 Javascript
浅谈js的html元素的父节点,子节点
2016/08/06 Javascript
快速解决js中window.location.href不工作的问题
2016/11/02 Javascript
vue2.0使用Sortable.js实现的拖拽功能示例
2017/02/21 Javascript
jQuery Ajax使用FormData上传文件和其他数据后端web.py获取
2017/06/11 jQuery
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
为什么说JavaScript预解释是一种毫无节操的机制详析
2018/11/18 Javascript
JavaScript对象拷贝与赋值操作实例分析
2018/12/10 Javascript
详解Vue基于vue-quill-editor富文本编辑器使用心得
2019/01/03 Javascript
NestJs 静态目录配置详解
2019/03/12 Javascript
JavaScript命名空间模式实例详解
2019/06/20 Javascript
详解Python中的序列化与反序列化的使用
2015/06/30 Python
Python3基础教程之递归函数简单示例
2019/06/07 Python
使用python执行shell脚本 并动态传参 及subprocess的使用详解
2020/03/06 Python
CSS3中使用RGBA设置透明度的示例
2015/08/04 HTML / CSS
html5定制表单_动力节点Java学院整理
2017/07/11 HTML / CSS
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
农药学硕士毕业生自荐信
2013/09/25 职场文书
应届大学生自荐信
2013/12/05 职场文书
《三亚落日》教学反思
2014/04/26 职场文书
2015年七一建党节慰问信
2015/03/23 职场文书
入党后的感想
2015/08/10 职场文书
创业不要错过,这4种餐饮新模式
2019/07/18 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书