简单的单入口MVC的实现

MVC就不多说了,网上到处都是,各种framework基本都是基于mvc的,但是学习一个模板的代价也挺大的,而且效率也是个问题,所以我就自己实现了一下。

先来看看index.php,一共三句话,当然这是最基本的,其他功能可以自己扩展

PHP代码
  1. require("config.php");   
  2. require("function.php");   
  3. require("dispatcher.php");  

再来看看config.php,里面定义了一些常量

PHP代码
  1. //server info   
  2. define("HOST","localhost");   
  3. define("USER","root");   
  4. define("PASSWORD","123456");   
  5. define("DATABASE","article");   
  6.     
  7. //path info   
  8. define("INCLUDE_PATH",dirname(__FILE__));   
  9.     
  10. //controller   
  11. define("CONTROLLER_PATH",INCLUDE_PATH."/controller");  

function.php里定义了一些基本的函数

PHP代码
  1. //format exception   
  2. function format_exception(Exception $e){   
  3.       print <<<EOT   
  4.       <div style="margin:200px auto;width:400px;border:1px solid #D5924D;background:#EFEBE7;font-size:14px;text-align:center;padding:20px">   
  5. {$e->getMessage()}</div>   
  6.       <!–<meta HTTP-EQUIV=REFRESH CONTENT=‘1; URL=javascript:history.go(-1)’>–>   
  7. EOT;   
  8. die();   
  9. }   
  10.     
  11. //get controller and init controller   
  12. function get_controller($controller_name){   
  13.       if(!file_exists(CONTROLLER_PATH."/{$controller_name}.php")){   
  14.             throw new Exception("there is no such a controller named <font color=red>$controller_name</font>");   
  15.       }   
  16.       else{   
  17.             require(CONTROLLER_PATH."/{$controller_name}.php");   
  18.       }   
  19.       if(!class_exists($controller_name)){   
  20.             throw new exception("there is no class named {$controller_name}");   
  21.       }   
  22. }   

最后来看看dispatch.php,主要是引入目标文件,并实例化

PHP代码
  1. $controller = $_GET["controller"]."Controller";   
  2. $action = isset($_GET["action"])?$_GET["action"]."Action":"indexAction";   
  3. try{   
  4.       get_controller($controller);   
  5.          
  6.       $controller = new $controller();   
  7.          
  8.       $controller->$action();   
  9.     
  10. }   
  11.     
  12. catch(Exception $e){   
  13.       format_exception($e);   
  14. }   

文件格式
controller的命名规则是:控制器名+”Controller”,比如:”articleController”,方法的命名规则是:方法名+”Action”,比如:”readAction”

没有写入model功能,这个只需在controller里引入就行了,比如
require(INCLUDE_PATH.”/model/articleModel.php”);

调用的时候url就像这样:”http://www.xxxx.com/index.php?controller=article&action=read”,如果要加入其他参数,加在后面就行了,可以顺利传到相应的action。

最后为了防止直接从controller文件夹浏览,可以加入.htaccess,内容如下

PHP代码
  1. order deny,allow   
  2. deny from all
posted @ 2008-08-23 10:40  酷越  阅读(407)  评论(0编辑  收藏  举报