简单mvc框架核心笔记
简单mvc框架核心笔记
看了thinkphp5的源码,模仿写了一个简单的框架,有一些心得笔记,记录一下
1.目录结构
比较简单,没有tp那么复杂,只是把需要的核心类写了一些。
核心类库放在mykj里,

2,生命周期,执行流程
入口文件自然是public里的index
index里引入start.php,
start.php中引入base.php,并且执行主程序
base.php中执行自动加载,文件注册机制,注册错误机制等
3,主程序如果实现从url到页面输出
基本的逻辑是,从url里获取到PATH_INFO,再根据‘/’截取到具体模块,控制器和方法的值,有路由机制的时候,需要读取路由里相应的配置。
然后加载相应app中的控制器,执行相应的方法,控制器中用assign来赋值变量,fetch来输出模板。
4,各个阶段的主要程序
1.自动加载机制
主要用了spl_autoload_register,php自从有了命名空间功能,自动加载就变得简单明了。使用spl_autoload_register函数加上需要自动加载执行的方法,就实现了类的自动加载。
spl_autoload_register($autoload ?: 'mykj\\Loader::autoload', true, true);

2.寻找url里对应的模块,控制器和方法。
这里截取url比较简单,获取路由用到了正则,这里不再陈述,说一下核心生产控制器实例的方法
生产类的对象,实例化

执行方法

ReflectionClass和ReflectionMethod这两个php系列函数,一般不经常用,只有在写这种框架的时候会用到,他们都是可以传入变量执行实例化类的一系列方法。
3.模板输出功能
模板输出的简单版逻辑是,通过assign赋值变量,fetch指定相应模板,核心view类加载模板,正则替换模板中的标签,然后生成缓存php文件,最后输出。
这里有个很方便的函数extract,可以将数组中的key做变量,值做值,方便assign赋值。
// 模板阵列变量分解成为独立变量
extract($this->data, EXTR_OVERWRITE);//变量替换
以上便是简单tp5mvc框架的逻辑,tp5中每个阶段有许许多多其他的功能,向中间件、钩子等等功能,都需要更细致的学习。
简单mvc框架核心笔记的更多相关文章
- 使用Java元注解和反射实现简单MVC框架
Springmvc的核心是DispatcherServlet来进行各种请求的拦截,进而进行后续的各种转发处理.流程图如下: 说明:客户端发出一个http请求给web服务器,web服务器对http请求进 ...
- PHP MVC框架核心类
PHP MVC框架核心类 现在我们举几个核心框架的例子演示:在framework/core下建立一个Framework.class.php的文件.写入以下代码: // framework/core/F ...
- java写个自己的mvc框架学习笔记
1. 介绍 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离的 ...
- 手写一个自己的简单MVC框架myPHP
myPHP框架 采用的是MVC 思想,应用纯面向对象及项目单一入口,实现的一个自定义的框架.(自己兴趣的练习) 一.项目单一入口 入口文件 myphp\index.php前台 一个网站所有的请求都请求 ...
- 自己实现的简单MVC框架(类似Struts2+Spring)
一.框架简介 本框架是一个类似于Struts2+Spring的框架,目的在于个人钻研和技术分享,将流行技术框架Struts2.Spring中使用到的主要技术以较为简化的方式实现出来,给大家一个更直观的 ...
- spring mvc 框架核心文档
http://docs.spring.io/spring-data/ Parent Directory - cassandra/ 01-Apr-2014 01:50 - commons/ 29-Jan ...
- 自己动手写一个简单的MVC框架(第二版)
一.ASP.NET MVC核心机制回顾 在ASP.NET MVC中,最核心的当属“路由系统”,而路由系统的核心则源于一个强大的System.Web.Routing.dll组件. 在这个System.W ...
- 一个简单 Go Web MVC 框架实现思路
需要的知识点 为了防止你的心里不适,需要以下知识点: Go 基本知识 Go 反射的深入理解 使用过框架 Go Web 服务器搭建 package main import ( "fmt&quo ...
- 封装简单的mvc框架
MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式. MVC把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller). PH ...
随机推荐
- 基于docker-compose搭建sonarqube代码质量检测平台
一.需求 在我们开发的过程中,难免有时候代码写的不规范,或存在一些静态的bug问题,这个时候一个良好的代码检查工具就很有必要,而sonarqube正好可以满足整个要求. 二. docker-compo ...
- dinic板子
loj上偷学长的( 注意几点: id初值赋1才能让正向弧反向弧对应起来 很多题要拆点,一定保证空间 dfs里rest=0的终止条件不能放在for循环里 #include<cstdio> # ...
- 五分钟搞懂spring-cloud-square
欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 初识spring-cloud-square 2021年 ...
- Python hashlib Unicode-objects must be encoded before hashing
Python2中没有这个问题 python3中 hashlib.md5(data)函数中data 参数的类型应该是bytes hash前必须把数据转换成bytes类型 Python 2.7.12 (d ...
- K8S在线部署含Dashborad
参考文章 https://www.kubernetes.org.cn/5462.html 前言 Kubernetes作为容器编排工具,简化容器管理,提升工作效率而颇受青睐.很多新手部署Kubernet ...
- Web实时通信,SignalR真香,不用愁了
前言 对于B/S模式的项目,基础的场景都是客户端发起请求,服务端返回响应结果就结束了一次连接:但在很多实际应用场景中,这种简单的请求和响应模式就显得很吃力,比如消息通知.监控看板信息自动刷新等实时通信 ...
- Spring Security OAuth2 单点登录
1. OAuth 2.0 OAuth(Open Authorization)为用户资源的授权提供了一个安全的.开放而又简易的标准.最简单的理解,我们可以看一下微信OAuth2.0授权登录流程: 通过O ...
- flask gevent
flask的不同部署方式 使用gevent部署,只是在不同请求之间是异步的,同一个请求之间还是串行的. https://iximiuz.com/en/posts/flask-gevent-tutori ...
- sqlalchemy 执行sql
关键需要使用text from sqlalchemy import create_engine, text sql = 'SELECT * FROM my_table WHERE account_id ...
- JS中innerHTML、outerHTML、innerText 、outerText、value的区别与联系?
1.innerHTML 属性 (参考自<JavaScript高级程序设计>294页) 在读模式下,innerHTML 属性返回与调用元素的所有子节点(包括元素.注释和文本节点)对应的 HT ...