用PHP开始你的MVC (一)整合你的站点入口

这是一篇介绍如何用php来实现MVC模式开发的文件。关于MVC模式的技术文章网上随处可以,所以这篇文件将不再讲述这种模式的优缺点(实际上是我说不清楚),子讲他的php技术实现。并且在以后的系列文章中也是以讲技术为主。

一、实现统一的网站入口(在MVC中调用Controler层的方法,也就是控制层)


大家也许经常在网上看到这样的路径(http://www.aaa.com/aaa/bbb/aaa?id=5),让人不解,这样的网站的实现方式有几种可能性:
1、隐藏文件的扩展名,对这种做法的好处,众说纷纭,不过个人觉得没有必要;
2、用了网站的重定向规则,实现虚拟路径;
3、强制文件解析的方式,实现虚拟路径。
用第2/3种方法可以实现网站的统一接口,合理的整合网站,更好的体现网站的安全性和架构,用这两种方式的网站大多是使用“MVC”模式构

建和实现的。


下面是一个例子

访问路径如下:
....../test/*******/Bad
....../test/*******/Good
(其中的"******"可以用任何字符串替换,"......."是你的web路径)

文件的目录结构如下
|--.htaccess
|--test
|--Application.php
|--Controler/GoodControler.php
|--Controler/BadControler.php

注意文件".htaccess",在windows下不能直接建立的,可以在命令行模式下建立.


文件0:(.htaccess)(这个文件是更改apache的配置方式用的)
<filestest>
forcetypeapplication/x-httpd-php
</files>

文件1:(test.php)

<?php
/*-------------------------------------
*test.php
*
*作为你的网站的入口的文件
*用来初始化和入口
*调用执行Controler的调用
*
-------------------------------------*/
require"Application.php";
$aa=newApplication();
$aa->parse();
$aa->go();

?>

文件2:(GoodControler.php)

<?php
/*-------------------------------------
*GoodControler.php
*
*用来控制url=/test/Good来的访问
*
-------------------------------------*/
classGoodControler{
/*
*控制类的调用方法,唯一的报漏给外部的接口
*/
functioncontrol(){
echo"thisisfromGoodControlerurl=*********/test/Good";
}
}

?>

文件3:(BadControler.php)

<?php
/*-------------------------------------
*BadControler.php
*
*用来控制url=/test/Bad来的访问
*
-------------------------------------*/
classBadControler{
/*
*控制类的调用方法,唯一的报漏给外部的接口
*/
functioncontrol(){
echo"thisisfromGoodControlerurl=*********/test/Bad";
}
}

?>

文件4:(Application.php)

<?php
/*-------------------------------------
*Application.php
*
*用来实现网站的统一入口,调用Controler类
*
-------------------------------------*/
classApplication{
//用来记录所要进行的操作
var$action;
//controler文件的路径名
var$controlerFile;
//controler的类名
var$controlerClass;

functionApplication(){
}

functionparse(){
$this->_parsePath();
$this->_getControlerFile();
$this->_getControlerClassname();
}
/*
*解析当前的访问路径,得到要进行动作
*/
function_parsePath(){
list($path,$param)=explode("?",$_SERVER["REQUEST_URI"]);
$pos=strrpos($path,"/");
$this->action=substr($path,$pos+1);
}
/*
*通过动作$action,解析得到该$action要用到的controler文件的路径
*/
function_getControlerFile(){
$this->controlerFile="./Controler/".$this->action."Controler.php";
if(!file_exists($this->controlerFile))
die("Controler文件名(".$this->controlerFile.")解析错误");
require_once$this->controlerFile;
}
/*
*通过动作$action,解析得到该$action要用到的controler类名
*/
function_getControlerClassname(){
$this->controlerClass=$this->action."Controler";
if(!class_exists($this->controlerClass))
die("Controler类名(".$this->controlerClass.")解析错误");
}
/*
*调用controler,执行controler的动作
*/
functiongo(){
$c=new$this->controlerClass();
$c->control();
}
}

?>

你可能感兴趣的:(PHP)