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模拟SQL Server的两个日期处理函数
Oct 09 PHP
中篇:安装及配置PHP
Dec 13 PHP
php生成扇形比例图实例
Nov 06 PHP
PHP ignore_user_abort函数详细介绍和使用实例
Jul 15 PHP
PHP自带函数给数字或字符串自动补齐位数
Jul 29 PHP
php管理nginx虚拟主机shell脚本实例
Nov 19 PHP
PHP中的traits实现代码复用使用实例
May 13 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
Jun 10 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
yii2.0实现pathinfo的形式访问的配置方法
Apr 06 PHP
php实现背景图上添加圆形logo图标的方法
Nov 17 PHP
PHP四种排序算法实现及效率分析【冒泡排序,插入排序,选择排序和快速排序】
Apr 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 时间日期操作实战
2011/08/26 PHP
理解PHP中的stdClass类
2014/04/18 PHP
微信公众号判断用户是否已关注php代码解析
2016/06/24 PHP
php上传后台无法收到数据解决方法
2019/10/28 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
jQuery powerFloat万能浮动层下拉层插件使用介绍
2010/12/27 Javascript
javascript简易缓动插件(源码打包)
2012/02/16 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
Jquery对select的增、删、改、查操作
2015/02/06 Javascript
javascript高级编程之函数表达式 递归和闭包函数
2015/11/29 Javascript
jQuery的框架介绍
2016/05/11 Javascript
ES6字符串模板,剩余参数,默认参数功能与用法示例
2017/04/06 Javascript
JavaScript设计模式之策略模式详解
2017/06/09 Javascript
浅谈js中的this问题
2017/08/31 Javascript
解决mui框架中switch开关通过js控制开或者关状态时小圆点不动的问题
2019/09/03 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
python 获取文件列表(或是目录例表)
2009/03/25 Python
解决python写的windows服务不能启动的问题
2014/04/15 Python
Python实例之wxpython中Frame使用方法
2014/06/09 Python
python 基础教程之Map使用方法
2017/01/17 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
基于并发服务器几种实现方法(总结)
2017/12/29 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
python读取csv和txt数据转换成向量的实例
2019/02/12 Python
Python爬虫之UserAgent的使用实例
2019/02/21 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
python 实现识别图片上的数字
2019/07/30 Python
基于Python实现天天酷跑功能
2021/01/06 Python
[原创]赚疯了!转手立赚800+?大佬的python「抢茅台脚本」使用教程
2021/01/12 Python
英国玛莎百货澳大利亚:Marks & Spencer Australia
2019/08/30 全球购物
机关财务管理制度
2014/01/17 职场文书
开会迟到检讨书范文
2015/05/06 职场文书
2015年社区科普工作总结
2015/05/13 职场文书
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
尝试使用Python爬取城市租房信息
2022/04/12 Python