首页 > 开发 > PHP > 正文

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

2024-05-04 22:59:02
字体:
来源:转载
供稿:网友

这是一篇介绍如何用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的配置方式用的)
<files test>
forcetype application/x-httpd-php
</files> 

文件1:(test.php)

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

?>
 

文件2:(goodcontroler.php)

<?php
/*-------------------------------------
 * goodcontroler.php
 *
 * 用来控制 url=/test/good 来的访问
 *
 -------------------------------------*/
class goodcontroler{
    /*
     * 控制类的调用方法,唯一的报漏给外部的接口
     */
    function control(){
     echo "this is from goodcontroler url=*********/test/good";
    }
}

?>
 

文件3:(badcontroler.php)

<?php
/*-------------------------------------
 * badcontroler.php
 *
 * 用来控制 url=/test/bad 来的访问
 *
 -------------------------------------*/
class badcontroler{
    /*
     * 控制类的调用方法,唯一的报漏给外部的接口
     */
    function control(){
     echo "this is from goodcontroler url=*********/test/bad";
    }
}

?>
 

文件4:(application.php)

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

function application(){
    }

    function parse(){
        $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的动作
     */
    function go(){
        $c = new $this->controlerclass();
        $c->control();
    }
}

?>
 

 

 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表