background image

PHP 实现 MVC 开发简单方法

具体实现

MVC,觉得最好还是要做到单点入口。

    什么是单点入口呢?所谓单点入口就是整个应用程序只有一个入口,所有的实现都通过
这个入口来转发,比如说在上面我们就使用

index.php 作为程序的单点入口,当然这个是可

以由你自己任意控制的。
    为什么要做到单点入口呢?单点入口有几大好处:第一、一些系统全局处理的变量,类,
方法都可以在这里进行处理。比如说你要对数据进行初步的过滤,你要模拟

 session 处理,

你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面(主要是实现在全
局,具体你可以参考我先前翻译的一些文章《在

 PHP 中使用全局变量》)。第二、程序的架构

更加清晰明了。当然好处还有很多的,我也不一一列举了,具体你可以去体会。
    当然单点入口也存在一些不足,比如你系统大了后,不可能只一个点做为入口,尤其系
统存在两个完全不相关的功能时候,不过很高兴的说,这个是可以扩展,你可以扩展多个
入口。比如说在最近一个大项目中,后台的管理和前台是不相关的,所以我就会有两个入口,
一个是

index.php 一个是 admin.php。但这不不是说单点入口不好(具体含义你可以揣摩下)。

那么,如何实现单点入口呢?这是我本节的重点。一般来说都是通过

url 的地址映射实现的.

单点入口最关键的就是通过

url 传递参数来实现程序的分配,具体说,比如:地址是

index.php?controller=test&action=test,这就通过 index.php 把请求转发到对应的

 

testController 文件中,并执行其对应的 testAction 方法(这里的控制器和方法的命名都参考

Zend Framework 的思想)。

下面我们用最简单的方法是来实现上面说的单点入口(记住:简单起见,我这里没有使用
URL 映射了)
/index.php
<?
/**
* MVC 演示 demo
* 仅仅实现最基本的 MVC 功能,不包含安全处理,数据过滤,及其他优化措施。
*/
define(‘SITE_PATH’,str_replace(”,’/',dirname(__FILE__)));//定义系统目录

$controller=(!empty($_GET['controller']))?$_GET['controller']:’index’;//获取控制器,默认 index
$action=(!empty($_GET['action']))?$_GET['action']:’index’;//方法名称,默认 index

$controller_name=$controller.’Controller’;
$controller_file=SITE_PATH.’/app/controller/’.$controller_name.’.class.php’;//获取控制器文件
if(file_exists($controller_file)){
require_once($controller_file);
$controller=new $controller_name();
$controller->{$action.’Action’}();
}else{
die(‘找不到对应的控制器!’);
}
?>