PHP深入解读MVC框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP深入解读MVC框架相关的知识,希望对你有一定的参考价值。
MVC的开发模式在这里就不在赘述
成熟的MVC框架有很多,本文的目的是在帮助初学者了解MVC的工作原理
直入主题
其中Application目录下:包括配置文件,控制器目录,模型,视图
Myphp框架目录下:有核心文件,数据库操作类,帮助类,第三方类等
core目录下:控制器基类,框架核心类,模型基类
创建完这些基本的目录后,在项目的根目录下创建index.php目录,这是所有请求的入口
<?php // 引入框架核心类 include "MyPHP/core/Framework.class.php"; // 调用初始化方法 Framework::run();
在Framework.class.php中对请求地址进行解析,实例化对应控制器,执行相应方法
<?php class Framework{ public static function run(){ //这里执行的顺序不能错 self::init(); self::auto_load(); self::route(); } //定义控制器、视图、配置文件路径,获得当前请求控制器和方法名 public static function init(){ define("DS", DIRECTORY_SEPARATOR); define("ROOT", getcwd().DS); define("APP_PATH", ROOT."Application".DS); define("FRAMEWORK_PATH", ROOT . "MyPHP" .DS); define("PUBLIC_PATH", ROOT . "Public" . DS); define("MODEL_PATH", APP_PATH . "Model" . DS); define("VIEW_PATH", APP_PATH . "View" . DS); define("CONTROLLER_PATH", APP_PATH . "Controller" .DS); define("CONFIG_PATH", APP_PATH . "Config" .DS); define("CORE_PATH", FRAMEWORK_PATH . "core" .DS); define("DB_PATH", FRAMEWORK_PATH . "database" . DS); define("HELPER_PATH", FRAMEWORK_PATH . "helpers" . DS); define("LIB_PATH", FRAMEWORK_PATH . "libraries" .DS); //从用户请求中 获得 当前平台 控制器 方法 define("PLATFORM", isset($_REQUEST[‘p‘])?$_REQUEST[‘p‘]:"Home"); define("CONTROLLER", isset($_REQUEST[‘c‘])?$_REQUEST[‘c‘]:"Index"); define("ACTION", isset($_REQUEST[‘a‘])?$_REQUEST[‘a‘]:"index"); //获得当前请求控制器 和视图的路径 define("CUR_CONTROLLER_PATH", CONTROLLER_PATH.PLATFORM.DS); define("CUR_VIEW_PATH", VIEW_PATH.PLATFORM.DS); //获得文件上传路径 define("UPLOAD_PATH", PUBLIC_PATH."upload".DS); //手动载入核心类 require CORE_PATH."Controller.class.php"; require CORE_PATH."Model.class.php"; require DB_PATH."mysql.class.php"; //载入配置文件 $GLOBALS[‘config‘] = include CONFIG_PATH."config.php"; //通常放在公共文件头部,这样各页面调用的时候就不会冲突了, 设置时区,编码,开启ob等操作一般都放 //方法头部的好处是可以在程序被调用时就自动执行,且不重复执行 session_start(); } //路由方法 public static function route(){ //确定类名和方法名 $controller_name = CONTROLLER."Controller"; $action_name = ACTION."Action"; //实例化控制器类 $controller = new $controller_name; //实行方法 $controller->$action_name(); } //注册自动加载 //当new 一个不存在的类时会自动调用spl_autoload_register中注册的方法,并将类名作为参数传入 public static function auto_load(){ spl_autoload_register(array(__CLASS__,"load")); } //加载方法 public static function load($className){ //控制器类和模型类,如GoodsController,AdminModel if (substr($className, -10) == ‘Controller‘){ require CUR_CONTROLLER_PATH . "{$className}.class.php"; } elseif (substr($className, -5) == "Model"){ require MODEL_PATH . "{$className}.class.php"; } else { //其它情况,暂无 } } }
测试:在地址栏中输入 http://localhost/Shop/index.php?p=Admin&c=Index&a=index
会自用调用IndexController控制器下的indexAction方法
<?php class IndexController{ public function indexAction(){ echo "这是Controller控制器下的index方法"; } }
以上是关于PHP深入解读MVC框架的主要内容,如果未能解决你的问题,请参考以下文章