PHP学习笔记(4) - 实现自己的MVC框架
在PHP中实现一个所谓的MVC框架非常简单。这里说一下思路。
一、首先用spl_autoload_register函数实现自己的类型自动加载机制。这样其他代码都不需要再考虑如何将类所在的文件include进来。
二、从url中提取出controller和action的名称,组织起来用反射实例化控制器类,并调用控制器的execute方法。控制器的execute方法同样也会用反射查找action方法并调用,将action返回的response对象写入到输出流中。如果controller或action不存在时则返回404状态。
三、要实现视图,首先要定义一个view类,它将另外一个php视图文件include到一个方法里,这样可以限制被包含文件中变量的作用域。其次view类会有一个$model属性,用它来和被包含的php共享数据模型,这样我们就能轻松地在视图中呈现数据了。当然还可以用ob_start、ob_get_contents、ob_end_clean这几个函数来“捕获”视图呈现的内容。
四、接第二步,如果想呈现一个视图,那么就在action中返回一个ViewResponse,想输出一段json数据,就返回一个JsonResponse,框架提供一个基类ActionResponse,不管它的派生类是什么框架只需要将它生成的内容写入到输出中。
实际使用的时候需要注意一下安全和性能的问题。
PHP学习笔记(4) - 实现自己的MVC框架的更多相关文章
- 【Spring学习笔记-MVC-5】利用spring MVC框架,实现ajax异步请求以及json数据的返回
作者:ssslinppp 时间:2015年5月26日 15:32:51 1. 摘要 本文讲解如何利用spring MVC框架,实现ajax异步请求以及json数据的返回. Spring MV ...
- JSP学习笔记(6)—— 自定义MVC框架
仿照SpringMVC,实现一个轻量级MVC框架,知识涉及到了反射机制.注解的使用和一些第三方工具包的使用 思路 主要的总体流程如下图所示 和之前一样,我们定义了一个DispatchServlet,用 ...
- .NET MVC 学习笔记(一)— 新建MVC工程
一..NET MVC 学习笔记(一)—— 新建MVC工程 接触MVC有段时间了,一直想找机会整理一下,可是限于文笔太差,所以一直迟迟羞于下手,想到最近做过的MVC项目也有一些了,花点时间整理一下方便以 ...
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- Backbone学习笔记一Backbone中的MVC
原文章地址http://bigdots.github.io/2015/12/01/Backbone学习笔记(一)/#more Backbone.js为复杂WEB应用程序提供模型(models).集合( ...
- 【Spring学习笔记-MVC-15.1】Spring MVC之异常处理=404界面
作者:ssslinppp 异常处理请参考前篇博客:<[Spring学习笔记-MVC-15]Spring MVC之异常处理>http://www.cnblogs.com/sssl ...
- 【Spring学习笔记-MVC-13.2】Spring MVC之多文件上传
作者:ssslinppp 1. 摘要 前篇文章讲解了单文件上传<[Spring学习笔记-MVC-13]Spring MVC之文件上传>http://www.cnblogs.co ...
- 【转】Backbone.js学习笔记(二)细说MVC
文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Bac ...
- [ExtJS5学习笔记]第九节 Extjs5的mvc与mvvm框架结构简介
本文地址:http://blog.csdn.net/sushengmiyan/article/details/38537431 本文作者:sushengmiyan ------------------ ...
随机推荐
- 递归循环JSON
using System; using System.Collections.Generic; using System.Linq; using System.Web; /// <summary ...
- 使用百度地图结合GPS进行定位
本文在上文基础上加入GPS定位功能,实现实时定位,代码如下: Activity: package com.home; import android.app.Activity; import andro ...
- pomelo流程
1.首先第一次会加载master服务器.这个比较特别..他负责启动其他服务器 加载master组件和monitor组件..然后执行所有组件的start.. master组件有自己的ConsoleSer ...
- 面向对象的程序设计(二)理解各种方法和属性typeof、instanceof、constructor、prototype、__proto__、isPrototypeOf、hasOwnProperty
//理解各种方法和属性typeof.instanceof.constructor.prototype.__proto__.isPrototypeOf.hasOwnProperty. //1.typeo ...
- LayoutInflater
Android中LayoutInflater的使用 博客分类: Android Inflater英文意思是膨胀,在Android中应该是扩展的意思吧. LayoutInflater的作用类似于 f ...
- LLBLGen代码生成工具
LLBLGen代码生成工具 下载地址:http://www.llblgen.com/ 最新版本4.2 概述 LLBLGen是一个数据访问的解决方案; 你使用LLBLGen创建实体/域模型,定义了映射和 ...
- Ext.Net 问题收集
Ext.Net DateField只显示年月 <ext:DateField runat="server" Format="yyyy-MM"> < ...
- Android Studio配置Dagger2 以及butterknife
一.配置butterknife 在build.gradle(Module)文件中的dependencies模块添加: dependencies { // add butterknife compile ...
- java.lang.NoSuchFieldError: RAW_XML_FILE_HEADER,调用XWPFTemplate动态合并生成一个新的docx文档时报错
在使用 org.apache.poi 对office文件 根据表单内容和已上次的附件 动态合并成一个新的文档时,本地调试完全ok 但是发布倒Linux环境上就老是报这个错误java.lang.NoS ...
- oracle中对LONG列进行查询
SQL> CREATE TABLE T_LONG (ID NUMBER, LONG_COL LONG); 表已创建. SQL> INSERT INTO T_LONG VALUES (1, ...