0

0

php中mvc框架总结1(7)

php中文网

php中文网

发布时间:2016-06-06 19:44:44

|

1081人浏览过

|

来源于php中文网

原创

1 .代码结构的划分: 目前的目录结构: / 站点根目录 /application/ 应用程序目录 Model / 模型目录 View / 视图目录 Back / 后台 front / test / 测试平台 Controller / 控制器目录 Back / 后台 front / 前台 test / 测试平台 /framework/ 框架 目录 MySQL

1.代码结构的划分:

目前的目录结构:
/站点根目录
/application/应用程序目录
    Model/模型目录
    View/视图目录
        Back/后台
        front/
        test/测试平台
    Controller/控制器目录
        Back/后台
        front/前台
        test/测试平台
/framework/框架目录
    MySQLDB.class.php 数据库操作类DAO
    Model.class.php 基础模型类
/index.php入口文件

php中mvc框架总结1(7)

2.请求首页

 2.1请求首页参数实例(请求localhost/index.php?p=front&c=shop&a=index)

 P=front  //后台还是前台 参数有back和front
 C=index   //控制器,此处请求首页控制器
 A=shop   //动作,此处为首页shop动作

2.2 首页统一请求代码

立即学习PHP免费学习笔记(深入)”;

php
//首先载入框架
require './framework/Framework.class.php';
//运行项目
Framework::run();

 2.3框架类代码

/**
 * 框架类 初始化基础功能
 */
class Framework {
    /**
     * 项目框架类的运行入口
     */
    public static function run() {
        self::_initPathConst();//初始化路径常量
        self::_initConfig();//加载配置
        self::_initDispatchParam();//初始化分发参数
        self::_initPlatformPathConst();//初始化平台相关的路径常量
        self::_initAutoload();//注册自动加载方法
        self::_dispatch();//请求分发
    }
}

2.3.1初始化路径常量

/**
     * 初始化路径常量
     */
    private static function _initPathConst() {
        //确定项目中使用的路径常量
        define('ROOT_PATH', getCWD() . '/');//项目的根目录
        
        define('APP_PATH', ROOT_PATH . 'application/');//应用程序目录
        define('CON_PATH', APP_PATH . 'controller/');//控制器目录
        define('MOD_PATH', APP_PATH . 'model/');//模型目录
        define('VIE_PATH', APP_PATH . 'view/');//视图层目录
        define('CFG_PATH', APP_PATH . 'config/');//配置文件目录

        define('FRW_PATH', ROOT_PATH . 'framework/');//框架目录
        define('TOL_PATH', FRW_PATH . 'tool/');//工具目录

        define('PUB_PATH', ROOT_PATH . 'public/');//公共资源目录
        define('UPD_PATH', PUB_PATH . 'upload_image/');//上传图片目录
    }

 2.3.2加载配置文件

private static function _initConfig() {
        //载入加载配置文件,并将配置项的值保存与 $config,全局变量中。
        $GLOBALS['config'] = require CFG_PATH . 'application.config.php';
    }

 2.3.3初始化分发参数

/**
     * 确定p,c,a参数,分发参数,(路由参数)
     */
    private static function _initDispatchParam() {
        //获得平台参数
        $GLOBALS['p'] = $p = isset($_GET['p']) ? $_GET['p'] : $GLOBALS['config']['app']['default_platform'];//p,platform
        //获得控制器类参数
        $GLOBALS['c'] = isset($_GET['c']) ? $_GET['c'] : $GLOBALS['config'][$p]['default_controller'];//c,controller
        //获得动作参数
        $GLOBALS['a'] = isset($_GET['a']) ? $_GET['a'] : $GLOBALS['config'][$p]['default_action'];//a,action
    }

以上代码中用到了初始加载配置文件,初始化默认请求,当你直接请求:localhost/index.php,没有参数的时候,加载系统默认参数

2.3.4初始化平台相关的路径常量

/**
     * 初始化当前平台相关的路径常量
     * 这个是用来判断P的,找到究竟是哪个控制下
     */
    private static function _initPlatformPathConst() {
        //与当前平台相关的路径常量
        define('CUR_CON_PATH', CON_PATH . $GLOBALS['p'] . '/');//当前平台的控制器目录
        define('CUR_VIE_PATH', VIE_PATH . $GLOBALS['p'] . '/');//当前平台的视图层目录
    }

2.3.4注册自动加载方法

private static function _initAutoload() {
        //注册自动加载
        spl_autoload_register(array(__CLASS__, 'selfAutoload'));
    }
'selfAutoload'方法如下
public static function selfAutoload($class_name) {
        //先判断是否为框架核心类,框架中可以被确定的类
        $class_file = array(
            'Model' => FRW_PATH . 'Model.class.php',
            'MySQLDB' => FRW_PATH . 'MySQLDB.class.php',
            'Controller' => FRW_PATH . 'Controller.class.php',
            'SessionDB' => TOL_PATH . 'SessionDB.class.php',
            'Captcha' => TOL_PATH . 'Captcha.class.php',
            'Upload' => TOL_PATH . 'Upload.class.php',
            'Image' => TOL_PATH . 'Image.class.php',
            'Page' => TOL_PATH . 'Page.class.php',
        );
        if (isset($class_file[$class_name])) {
            //是核心类
            require $class_file[$class_name];
        }    
        //是否为模型类
        elseif (substr($class_name, -5) == 'Model') {
            //模型类
            require MOD_PATH . $class_name . '.class.php';
        }
        //是否为控制器类
        elseif (substr($class_name, -10) == 'Controller') {
            //控制器类
            require CUR_CON_PATH . $class_name . '.class.php';
        }
    }

2.3.4 请求分发

/**
     * 请求分发
     * 将请求交由 某个控制器的某个动作完成
     */
    private static function _dispatch() {
        //实例化控制器类,与 调用相应的动作方法
        //ucfirst() 函数把字符串中的首字符转换为大写。
        $controller_name = ucfirst($GLOBALS['c']) . 'Controller';//match Match . Controller
        //载入控制器类
        $controller = new $controller_name;//可变类名

        //调用动作方法
        $action_name = $GLOBALS['a'] . 'Action';
        $controller->$action_name();//可变方法
    }

2.3.5当我们请求localhost/index.php的时候,相当于请求localhost/index.php?p=front&c=shop&a=index于是将初始化

     application\controller\front下的ShopController控制器,请求动作为indexAction

     indexAction代码如下:

public function indexAction() {
        //得到分类数据
        $model_cat = new CatModel;
        $cat_list = $model_cat->getNestedList();
        //载入前台首页模板
        require CUR_VIE_PATH . 'index.html';
    }

需要说明的是:

1、ShopController继承与平台控制器PlatformController,平台控制器继承于基础控制器类:controller

关系如下:php中mvc框架总结1(7)

2、在确定好MVC中的,Control动作后,接下来就是实现Model

   $model_cat = new CatModel;   ——》 便是实例化catModel类
    $cat_list = $model_cat->getNestedList();  ——》取得所有前台分类

3、在基础模型中,封装好所有基础操作数据库方法,其中getNestedLIst方法如下

/**
     * 得到嵌套的分类列表数据
     */
    public function getNestedList($p_id=0) {
        //获得所有分类
        $list = $this->getList();
        //制作嵌套的数据,递归查找
        return $this->getNested($list, $p_id);
    }

4、getList方法如下

 /**
     * 获得列表数据
     */
    public function getList() {
        $sql = "select * from `php_category`";
        return $this->_db->fetchAll($sql);
    }

5、Model实现好之后,就是载入View

    //载入前台首页模板
    require CUR_VIE_PATH . 'index.html';

2.3.6 总结:实现一个功能,首先确定Control,然后实现Model,最后载入View

2.3.7效果图  前台页面不加以阐述

php中mvc框架总结1(7)

 

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Word 字间距调整方法汇总
Word 字间距调整方法汇总

本专题整合了Word字间距调整方法,阅读下面的文章了解更详细操作。

2

2025.12.24

任务管理器教程
任务管理器教程

本专题整合了任务管理器相关教程,阅读下面的文章了解更多详细操作。

2

2025.12.24

AppleID格式
AppleID格式

本专题整合了AppleID相关内容,阅读专题下面的文章了解更多详细教程。

0

2025.12.24

csgo视频观看入口合集
csgo视频观看入口合集

本专题整合了csgo观看入口合集,阅读下面的文章了知道更多入口地址。

29

2025.12.24

yandex外贸入口合集
yandex外贸入口合集

本专题汇总了yandex外贸入口地址,阅读下面的文章了解更多内容。

58

2025.12.24

添加脚注通用方法
添加脚注通用方法

本专题整合了添加脚注方法合集,阅读专题下面的文章了解更多内容。

1

2025.12.24

重启电脑教程汇总
重启电脑教程汇总

本专题整合了重启电脑操作教程,阅读下面的文章了解更多详细教程。

3

2025.12.24

纸张尺寸汇总
纸张尺寸汇总

本专题整合了纸张尺寸相关内容,阅读专题下面的文章了解更多内容。

5

2025.12.24

Java Spring Boot 微服务实战
Java Spring Boot 微服务实战

本专题深入讲解 Java Spring Boot 在微服务架构中的应用,内容涵盖服务注册与发现、REST API开发、配置中心、负载均衡、熔断与限流、日志与监控。通过实际项目案例(如电商订单系统),帮助开发者掌握 从单体应用迁移到高可用微服务系统的完整流程与实战能力。

1

2025.12.24

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PHP课程
PHP课程

共137课时 | 7.7万人学习

JavaScript ES5基础线上课程教学
JavaScript ES5基础线上课程教学

共6课时 | 6.9万人学习

PHP新手语法线上课程教学
PHP新手语法线上课程教学

共13课时 | 0.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号