PHP原生实现简易的MVC框架
目录结构:
—|controller
—|Home.php
—|model
—|view
—|welcome.php
—|index.php
基本原理:
首页
index.php
通过获得地址栏中的路由名称获得对应控制器以及控制的方法名,通过require引入到index.php首页中。通过引入的对应控制器的类实例化一个对象,对象调用路由地址映射的方法,实现对视图层的调用显示。
实现具体代码:
/index.php
首页代码实现:
<?php
# 获取当前的服务地址
$server = $_SERVER;
#获取到当前访问的主机名之后的URI
$path = $server['REQUEST_URI']; # /test/index.php/home/welcome
$path = ltrim($path, '/'); # 去掉获得的路径前的 /
$controller_method = explode('/', $path); # 根据 / 获得分割数组来取得控制器名字和对应方法
$controller = ucfirst($controller_method[2]); # 将控制器名字的第一个更换为大写
$method = $controller_method[3]; # 对应的方法名
require_once __DIR__.'/controller/'.$controller.'.php'; # 定位到当前使用的控制器
$obj = new $controller(); //实例化控制器对象
$obj->$method(); //控制器对象调用目标方法
exit($obj);
/controller/Home.php
控制器代码实现:
<?php
class Home{
public function index(){
echo 'hello MVC';
}
public function welcome(){
require_once __DIR__.'/../view/welcome.php';
}
}
/view/welcome.php
视图层代码实现:
<!DOCTYPE html>
<html>
<head>
<title>welcome</title>
</head>
<body>
<div style="font-size: 18px;text-align: center;color: red;">welcome to hefei</div>
<?php echo date('Y-m-d H:i:s')?>
</body>
</html>
结束语:
基本上大部分框架都是基于MVC架构实现的,懂得基本的MVC框架设计的原理,有助于我们学习框架,以及对良好的框架的应用更加得心应手,并能很好地理解其中的设计思想,慢慢演化成为一个有想法的Coder。
PHP原生实现简易的MVC框架的更多相关文章
- 老司机教你用原生JDK 撸一个 MVC 框架!!!
其实 Spring MVC 是一个基于请求驱动的 Web 框架,并且也使用了前端控制器模式来进行设计,再根据请求映射规则分发给相应的页面控制器进行处理,具体工作原理见下图. 在这里,就不详细谈相关的原 ...
- php--->自己封装的简易版mvc框架
最近根据自己的理解,封装了一个自己的框架,来重新系统化梳理自己对mvc框架的理解:后续会陆续添加各种新的功能. 欢迎指点交流. GitHub:https://github.com/Frankltf/m ...
- 手写Spring MVC框架(一) 实现简易版mvc框架
前言 前面几篇文章中,我们讲解了Spring MVC执⾏的⼤致原理及关键组件的源码解析,今天,我们来模仿它⼿写⾃⼰的mvc框架. 先梳理一下需要实现的功能点: tomcat加载配置文件web.xml: ...
- 使用Node.js实现简易MVC框架
在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容.单靠静态资源岂能撑得起这些复杂的网站应用,本 ...
- [转] 使用Node.js实现简易MVC框架
在使用Node.js搭建静态资源服务器一文中我们完成了服务器对静态资源请求的处理,但并未涉及动态请求,目前还无法根据客户端发出的不同请求而返回个性化的内容.单靠静态资源岂能撑得起这些复杂的网站应用,本 ...
- 从零开始实现一个简易的Java MVC框架(三)--实现IOC
Spring中的IOC IoC全称是Inversion of Control,就是控制反转,他其实不是spring独有的特性或者说也不是java的特性,他是一种设计思想.而DI(Dependency ...
- 分享一实战性开源MVC框架<Linux、Windows跨平台开发so easy>
一.引子 开源地址 https://github.com/564064202/Moon.Mvc 欢迎加入开发 .NET Core微软还在发力,但作为商用还有一段距离,很多开发库尚不能用于.NET ...
- MVC系列——MVC源码学习:打造自己的MVC框架(四:了解神奇的视图引擎)
前言:通过之前的三篇介绍,我们基本上完成了从请求发出到路由匹配.再到控制器的激活,再到Action的执行这些个过程.今天还是趁热打铁,将我们的View也来完善下,也让整个系列相对完整,博主不希望烂尾. ...
- MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)
前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...
随机推荐
- iOS定位--CoreLocation
一:导入框架 #import <CoreLocation/CoreLocation.h> 二:设置代理及属性 <CLLocationManagerDelegate> @prop ...
- PHP导出成PDF你用哪个插件
准备工作 首先查询了相关的类库,有FPDF,zendPDF,TcPDF等等.首先看了下先选择了FPDF,可以说除了中文字符以外没有什么问题,中文乱码而且看了下最新版本没有很好的解决方案,所以只能放弃. ...
- 在linux (centos)上使用puppeteer实现网页截图
1.安装nodejs和npm # 下载解压 wget -c https://nodejs.org/dist/v8.9.1/node-v8.9.1-linux-x64.tar.xz tar -xvf n ...
- C语言I博客作业09
问题 答案 这个作业的属于那个课程 C语言程序设计II 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-4/homework/10034 我 ...
- Android DecorView 与 Activity 绑定原理分析
一年多以前,曾经以为自己对 View 的绘制已经有了解了,事后发现也只是懂了些皮毛而已.经过一年多的实战,Android 和 Java 基础都有了提升,时机成熟了,是时候该去总结 View 的绘制流程 ...
- 模块-time模块
time模块 time翻译过来就是时间,这个模块是与时间相关的模块,那么言外之意,如果我们在工作中遇到了对时间的需求(比如获取当前时间,获取时间戳等等)就要先想到time模块. time模块中对于时 ...
- 🔥《手把手教你》系列基础篇之4-python+ selenium自动化测试-xpath使用(详细教程)
1. 简介 俗话说:磨刀不误砍柴工,因此在我们要开始写自动化脚本之前,我们先来学习和了解几个基本概念,在完全掌握了这几个概念之后,有助于我们快速上手,如何去编写自动化测试脚本. 元素,在这个教程系列, ...
- 【Elasticsearch 7 探索之路】(四)Analyzer 分析
上一篇,什么是倒排索引以及原理是什么.本篇讲解 Analyzer,了解 Analyzer 是什么 ,分词器是什么,以及 Elasticsearch 内置的分词器,最后再讲解中文分词是怎么做的. 一.A ...
- pdf 在线预览之 pdfjs插件
这个插件不需要阅读器 也不会屏蔽签章 但是也是兼容到ie11
- (三)OpenStack---M版---双节点搭建---Keystone安装和配置
↓↓↓↓↓↓↓↓视频已上线B站↓↓↓↓↓↓↓↓ >>>>>>传送门 1.创建keystone数据库 2.创建随机密码作为管理员令牌 3.安装openstack-ke ...