php-mvc新闻项目体会-1

这几天一直都在钻研pengcheng大神的自定义mvc,以及他的新闻实例,从中体会mvc的power。再次对pengcheng大神表示崇高的敬意~框架虽然满大街了,但不妨碍我们通过构思自己的框架来加深对框架的理解,知其然更要知其所以然。先对pengcheng大神方向上香....鞠躬.

好吧,不闹了~进入正题。

上3节写了简单的MVC结构和Smarty的引入。MVC中V我们可以借助Smarty完成它的职能,另外M里面我们只是简单地返回一段数据,C里面我们也只是实现自动实例化各类而已。M和C绝对不会就如此简单。现在让我们从一个【新闻实例】来领教controller和model的高招。

本来,各个职能的文件需要有规范地分类。为了方便,就避免折腾文件路径的问题了。文件布局如下:

其中,data文件包括Smarty定义的各个模板文件,smarty文件夹就是存放下载的Smarty.看起来有些凌乱,高手勿喷~

config.php包含各参数的配置信息(VIEW引擎和DB引擎),打包成数组

封装VIEW引擎

首先,为了实现视图职能,定义一个view引擎:VIEW.php

在这个VIEW类里面定义了三个方法:

方法init,顾名思义,是为了完成对Smarty的初始化:包括引入Smarty.class.php文件,通过传入的$viewtype生成smarty类,通过传入的$config参数(数组)对Smarty的各属性赋值。

方法assign,这里再次定义assign方法,是为了把它包装成共有的静态方法,方便外部调用(不用再实例化),并且assign方法通过改造之后,可以把数据打包成数组的形式当做参数传入新包装的assign注册数组里面的每一个值。

方法display,这里只是为了把它包装成共有的静态方法。

最后,我们来重新审视一下这个VIEW类的方法,它们都是public static的,即是说,以后我们在外部调用的时候不再需要导入smarty.class.php和实例化,直接VIEW::assign()注册,再VIEW::display()就可以简单地实现mvc中的view职能了~

  封装数据库引擎

由于我们的项目需要对数据作保留,需要用到数据库的增删改查。我们又想,可不可以也封装一个数据库引擎,以后需要进行数据库操作的时候也直接调用静态方法就OK?

我们在一样在类里定义一个静态属性,用来存储实例化之后的对象。定义各个静态方法,方便外部直接调用。

我觉得这种方法就像java的抽象类:我们可以在里面定义属性,定义抽象方法,不需要具体地实现,只需要制定功能而已。但又跟抽象类有些小小的不同:外部调用不用new,没有继承,方法的具体实现靠一个Init方法new一个类(我称之为实现类)。通过自己的静态属性来存储‘实现类’的方法,通过自己的方法来调用类来实现‘实现类’的具体的方法。

打个形象地比喻:  封装的引擎就像是卖二手车的~定义一个静态变量接受‘实现类’的各种旧车(方法),然后把旧车(方法)换个崭新的壳子(包装成共有的静态方法public static)出售。

上面的VIEW引擎有Smarty作为‘实现类’,可是数据库(DB)引擎没有,那么我们就来定义它的‘实现类’来具现方法。是为mysql.class.php。至于mysql类的封装仁者见仁智者见智,怎么方便就怎么封装呗

注:1>引擎里面不能有输出语句,MVC思想就是分工分层,所以取得数据之后不能echo,只能return。

2>DB引擎并不代表Model,只是Model的一部分,可以理解为Model的工具

到这里,我们MVC中,view层搞定,model层暂告一段落。

前几节中已经了解到controller职能是实例化view和model并且调用他们的方法。但是,我们不在controller里直接实例化,而是通过定义函数function.php来实例化。function.php已经是老熟人了,见图:

看到这里或许有朋友会疑问:你这不是在逗我么?说好的MVC说好的V方法呢?

放心,我不认识猴子,它也请不动哥。V方法已经在Smarty中实现了,初始化Smarty就是初始化View。VIEW引擎取代了V的工作。

封装启动引擎

我一再强调此项目乃是pengcheng大神的神来之笔,启动引擎也是以其名字来命名PC.php。负责导入各文件,完成各引擎的实例化,以及对url传递参数的初始化。

这里封装一个public方法run统一执行各个private方法完成初始化,提高安全性

接下来,我们需要封装一个统一的入口文件,在里面直接调用run方法

测试一下:

不好意思,忘了定义controller文件了,也是逗了,我承认我是猴子派来的~哈哈

好,这里更加凸显了controller的职能,流程是这样的,从统一的入口文件admin.php进来,调用run初始化了各个引擎方法,接着通过C方法,进入控制层,调用url传参controller=xxx&method=xxx相应的M和V完成业务。如此,定义一个adminController.class.php文件

里面只写一个test方法,测试调用test方法:

测试成功,说明入口文件,控制层和视图层都是没问题的。可以接着往下开发了

时间: 2024-10-25 04:40:06

php-mvc新闻项目体会-1的相关文章

图文详解远程部署ASP.NET MVC 5项目

原文:图文详解远程部署ASP.NET MVC 5项目 话外篇: 由于感觉自己的机器比较慢,配置不好,所以最近想把之前的项目部署到实验室的服务器上,但是由于常不在实验室,所以在想能不能远程部署.因此今天专门研究了一下具体的过程,下面和大家分享一下.本人新手,还望大虾勿喷,有什么问题,还望高手指点. 一.本文实验环境: Windows Server 2012 R2 SQL Server 2012 Express Visual Studio 2013 项目为:ASP.NET MVC 5.0,使用的是L

使用Visual Studio 2015 开发ASP.NET MVC 5 项目部署到Mono/Jexus

最新的Mono 4.4已经支持运行asp.net mvc5项目,有的同学听了这句话就兴高采烈的拿起Visual Studio 2015创建了一个mvc 5的项目,然后部署到Mono上,浏览下发现一堆错误出现,心中一万只草泥马奔腾而来,这也叫支持吗,这个问题是Visual Studio造成的,不相信的话可以使用Xamarin.Studio创建的asp.net项目,部署过程非常顺利,没有遇到什么问题:本文就是为你解开这个结,如何Visual Studio 2015搞定ASP.NET MVC 5项目的

【MVC】ASP.NET MVC 4项目模板的结构简介

引言     在VS2012新建一个窗体验证的MVC 4项目后,可以看到微软已经帮我们做了很多了,项目里面该有的都有了,完全可以看成一个简单网站.作为开发,能理解里面文件结构和作用,也算是半只脚踏进MVC的大门了.下面依次介绍其中的文件作用. App_Start AuthConfig.cs AuthConfig类的RegisterAuth用来注册外部登录,具体作用在于用户可以用外部的账号登录本网站. BundleConfig.cs BundleConfig类的RegisterBundles可以将

ASP.NET MVC搭建项目后台UI框架—7、统计报表

ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET MVC搭建项目后台UI框架—4.tab多页签支持 ASP.NET MVC搭建项目后台UI框架—5.Demo演示Controller和View的交互 ASP.NET MVC搭建项目后台UI框架—6.客户管理(添加.修改.查询.分页) ASP.NET MVC搭建项目后台UI框架—7.统计报表 本节,我将通

在MVC的项目中访问静态页面

MVC在生成项目的时候会生成的WEB-INF底下.这个文件夹下面的文件是受保护的,都会走MVC的流程, 但是我希望在WebContent底下可以使用静态页面, 那么需要进入springmvc-servlet.xml 页面,加上一句话:  <mvc:resources mapping="/**"  location="/**" /> 这样,使用mvc:resources标签,可以将根目录下的文件全部定义为静态html,直接访问即可. 需要放到文件夹中: &

iOS 基于 MVC 的项目重构总结

关于MVC的争论 关于MVC的争论已经有很多,对此我的观点是:对于iOS开发中的绝大部分场景来说,MVC本身是没有问题的,你认为的MVC的问题,一定是你自己理解的问题(资深架构师请自动忽略本文). 行文过程中查阅了互联网上的大量文档,其中水平良莠不齐(最常见的就是MVC改个名就当MVVM的),当然也有许多非常有价值的参考资料,在文末会逐一列举,以供参考. iOS中的MVC和MVP Cocoa版本的MVC 根据官网上的描述, Cocoa中的MVC是这样的: Model Objects Encaps

ASP.NET MVC搭建项目后台UI框架—4、tab多页签支持

目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 ASP.NET MVC搭建项目后台UI框架—3.面板折叠和展开 ASP.NET MVC搭建项目后台UI框架—4.tab多页签支持 ASP.NET MVC搭建项目后台UI框架—5.Demo演示Controller和View的交互 在点击左侧菜单中的选项时,我希望有Extjs.EasyUI等中类似的tab页签功能,因为这样可以支持多个页面的浏览,有时候我们可能需要同时打开多个页

ASP.NET MVC搭建项目后台UI框架—2、菜单特效

目录 ASP.NET MVC搭建项目后台UI框架—1.后台主框架 ASP.NET MVC搭建项目后台UI框架—2.菜单特效 上一篇,已经把整个项目的框框给搭建好了,但是还没有任何js效果实现.这一节,我就来说下关于菜单的特效实现.我需要的效果如下: 需求总结: 点击顶部菜单模块,左侧显示不同模块下面的菜单列表 点击左侧菜单选项,展开下面的子菜单,并折叠其它菜单模块,菜单图标折叠显示为+,展开显示为-. 1.先看下Top视图中代码: 2.在Top视图的head中添加如下js: <script sr

如何编写NopCommerce插件(一)建立一个MVC的项目

一.建立一个MVC的项目: 二.添加Description.txt文件 其中,Group表示插件是属于哪一组. FriendlyName:插件的名称 SystemName:插件的唯一标示 FileName:插件所在的dll 三.添加RouteProvider.cs文件 public partial class RouteProvider : IRouteProvider { public void RegisterRoutes(RouteCollection routes) { routes.M