php-mvc新闻项目体会-1

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

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

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

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

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

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

                                                                       封装VIEW引擎
安全

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

在这个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方法:

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

相关文章
相关标签/搜索