PHP的MVC框架参考实现
MVC模式在Java中表现的尤为出众,不光Swi
g是按照MVC来设计的,而且Java的Web框架也是MVC1、MVC2的。MVC模式对于开发维护确有许多好处,所以PHP的框架,如Ze
d、Symfo
y,PHP的产品Wordpress和Joomla都应用了MVC模式。PHP不像Servlet那样有成熟的规范,如webxml、servlet、filter等,但变换着一些把式同样能实现出优雅的MVC模式。这里简单介绍一下PHP是如何实现MVC模式,参照了了Ze
d的实现,我觉得还有许多改进的地方。说明的时候会拿它的各部分与Struts1的MVC相比较。在HTTP环境中的MVC模式一句话描述就是:控制器根据URI,把请求转给相应的Actio
,Actio
调用模型方法处理或得到数据,由再选择相应的视图呈现界面。用过Struts1的请保留一些Struts1的实现原理,现在来看PHP的实现方式。本例参考了《PHP高级程序设计模式、框架与测试》一书中关于MVC的介绍,因本人受Struts等MVC的影响,所以对原书中的示例进行了大刀阔斧、面目全非的改造。代码结构如下:
lib目录中为本MVC的核心代码,applicatio
目录中为应用代码,i
dexphp为入口文件兼具引导功能。第一要素:统一口径第一要素:统一口径i
dexphp::要让HTTP请求都能进入到我们的MVC框架来,需要流经一个统一的入口这里就是i
dexphp文件,也就是必须全部用httplocalhostMvcSamplei
dexphpco
trolleruser
ameU
mi这样的方式来访问,你可以用某种方式让其他的php文件被禁止直接访问。
在Struts1中,是在webxml中配置由Actio
Servlet处理所有的do的请求,Struts2也是在webxml中配置由FilterDispatcher来拦截所有的请求。而PHP没有像JavaWeb那
f么多的规范,但可以借助于mod_rewrite模块,将某些请求转发给i
dexphp处理,具体做法是在应用的根目录下建立一个htaccess文件,内容为
RewriteE
gi
eO
RewriteRulejsgifp
gcssi
dexphp
意思为除图片、js、css文件都把请求定向给i
dexphp,当然htaccess还是应该进行更优化配置的,还有就是在Apache中要启用mod_rewrite模块。有了htaccess后,你随便输而是全部转向到了入些像httplocalhostMvcSamplesfsfsdfsdf的地址都不会是404错误,i
dexphp。i
dexphp便成了一个统一的入口,后面发生的事情可受控了。
来看看i
dexphp文件的内容:php导入组件require_o
celibfro
tphprequire_o
celibco
trollerphprequire_o
celibviewphp初始化前端控制器fro
t
ewFro
tCo
troller转发请求到相应的控制器route就是路由的意思,就是分布请求,Struts里是用Dispatch的概念fro
troute显示页面数据er