php项目中商店mvc框架总结(1),mvc框架_PHP教程

php中文网

php中文网

2016-07-13

1353人浏览

原创

php项目中商店mvc框架总结(1),mvc框架

1.代码结构的划分:

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

2.请求首页

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

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

2.2 首页统一请求代码

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

 2.3框架类代码

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

2.3.1初始化路径常量

<span>/*</span><span>*
     * 初始化路径常量
     </span><span>*/</span>
    <span>private</span> <span>static</span><span> function _initPathConst() {
        </span><span>//</span><span>确定项目中使用的路径常量</span>
        define(<span>'</span><span>ROOT_PATH</span><span>'</span>, getCWD() . <span>'</span><span>/</span><span>'</span>);<span>//</span><span>项目的根目录</span>
<span>        
        define(</span><span>'</span><span>APP_PATH</span><span>'</span>, ROOT_PATH . <span>'</span><span>application/</span><span>'</span>);<span>//</span><span>应用程序目录</span>
        define(<span>'</span><span>CON_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>controller/</span><span>'</span>);<span>//</span><span>控制器目录</span>
        define(<span>'</span><span>MOD_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>model/</span><span>'</span>);<span>//</span><span>模型目录</span>
        define(<span>'</span><span>VIE_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>view/</span><span>'</span>);<span>//</span><span>视图层目录</span>
        define(<span>'</span><span>CFG_PATH</span><span>'</span>, APP_PATH . <span>'</span><span>config/</span><span>'</span>);<span>//</span><span>配置文件目录</span>
<span>
        define(</span><span>'</span><span>FRW_PATH</span><span>'</span>, ROOT_PATH . <span>'</span><span>framework/</span><span>'</span>);<span>//</span><span>框架目录</span>
        define(<span>'</span><span>TOL_PATH</span><span>'</span>, FRW_PATH . <span>'</span><span>tool/</span><span>'</span>);<span>//</span><span>工具目录</span>
<span>
        define(</span><span>'</span><span>PUB_PATH</span><span>'</span>, ROOT_PATH . <span>'</span><span>public/</span><span>'</span>);<span>//</span><span>公共资源目录</span>
        define(<span>'</span><span>UPD_PATH</span><span>'</span>, PUB_PATH . <span>'</span><span>upload_image/</span><span>'</span>);<span>//</span><span>上传图片目录</span>
    }

 2.3.2加载配置文件

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

 2.3.3初始化分发参数

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

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

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

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

2.3.4注册自动加载方法

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

2.3.4 请求分发

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

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

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

PHP 8.5.5
PHP 8.5.5

PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载

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

     indexAction代码如下:

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

需要说明的是:

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

关系如下:

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

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

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

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

4、getList方法如下

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

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

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

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

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

 

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/967693.htmlTechArticlephp项目中商店mvc框架总结(1),mvc框架 1 .代码结构的划分: 目前的目录结构: / 站点根目录 /application/ 应用程序目录 Model / 模型目录...

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关专题

更多
墨刀AI提示词教学
墨刀AI提示词教学

本合集由PHP中文网精心整理,为您提供全面的墨刀AI提示词教学。内容涵盖高质量原型撰写公式与实操窍门,助您轻松掌握AI设计工具。无论是零基础入门还是进阶技巧,都能让您快速上手,大幅提升产品设计与协作效率。

2026.08.04

11

21

墨刀AI完整入门
墨刀AI完整入门

PHP中文网为您倾力打造墨刀AI保姆级入门指南完整版!本合集从零基础讲起,涵盖AI生成原型、提示词优化、图片转原型及多轮对话等核心功能。无论您是新手还是进阶用户,都能轻松掌握产品设计全流程。快来PHP中文网,一键解锁高效设计技巧,让想法即刻成型!

2026.08.04

8

20

墨刀AI进阶技巧
墨刀AI进阶技巧

本合集由PHP中文网精心整理,为您提供墨刀AI核心进阶策略指南。内容涵盖高效提示词写作、原型智能生成与微调、结构化导图制作及行业分析报告输出等实战技巧。助您轻松掌握AI设计工具,大幅提升产品设计与团队协作效率。

2026.08.04

10

14

火山引擎实名认证失败怎么办
火山引擎实名认证失败怎么办

火山引擎实名认证失败可能与证件信息填写错误、姓名或企业信息不一致、证件照片不清晰、营业执照状态异常、手机号验证失败或审核资料不完整有关。本专题整理个人认证、企业认证、资料上传、审核退回、重新提交和认证不通过的常见处理方法。

2026.08.04

5

10

火山引擎域名备案流程详解
火山引擎域名备案流程详解

火山引擎域名备案适合需要在火山引擎云服务器、对象存储、CDN或网站服务上绑定域名的用户参考。本专题整理备案入口、账号实名认证、备案类型选择、主体信息填写、网站信息提交、资料上传、初审核验、管局审核和备案失败排查,帮助用户完成网站上线前的备案流程。

2026.08.04

1

10

火山引擎DNS解析配置步骤
火山引擎DNS解析配置步骤

使用火山引擎DNS解析网站域名时,需要确认域名已完成管理接入,并正确配置服务器IP、CNAME地址或验证记录。本专题整理域名添加、记录类型选择、TTL设置、解析状态检查、备案和访问测试等流程,适合新手搭建网站时参考。

2026.08.04

3

10

火山引擎对象存储使用教程
火山引擎对象存储使用教程

火山引擎对象存储适合用于网站图片、视频文件、备份数据、静态资源和应用附件管理。本专题整理TOS控制台入口、存储桶创建、地域选择、权限设置、文件上传、访问链接生成、CDN加速、费用查看和常见上传或访问失败问题,帮助用户快速掌握对象存储基础操作。

2026.08.04

1

10

火山引擎云服务器使用教程
火山引擎云服务器使用教程

火山引擎云服务器使用教程适合第一次购买、部署和管理云服务器的用户参考。本专题整理控制台入口、实例创建、地域和配置选择、系统镜像设置、安全组放行、远程连接、网站部署、续费计费和常见连接失败问题,帮助用户快速完成云服务器基础使用流程。

2026.08.04

5

10

火山引擎API Key绑定大模型教程
火山引擎API Key绑定大模型教程

火山引擎API Key怎么绑定大模型适合需要在火山方舟、应用后台、脚本工具或AI编程软件中调用模型的开发者参考。本专题整理控制台服务开通、API Key创建、模型权限检查、模型ID选择、Base URL填写、调用测试和鉴权失败排查,帮助用户完成从密钥到模型调用的配置流程。

2026.08.04

2

10

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习