php项目中商店mvc框架总结(1),mvc框架
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于是将初始化
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>

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics



PHP 8.4 brings several new features, security improvements, and performance improvements with healthy amounts of feature deprecations and removals. This guide explains how to install PHP 8.4 or upgrade to PHP 8.4 on Ubuntu, Debian, or their derivati

Visual Studio Code, also known as VS Code, is a free source code editor — or integrated development environment (IDE) — available for all major operating systems. With a large collection of extensions for many programming languages, VS Code can be c

If you are an experienced PHP developer, you might have the feeling that you’ve been there and done that already.You have developed a significant number of applications, debugged millions of lines of code, and tweaked a bunch of scripts to achieve op

This tutorial demonstrates how to efficiently process XML documents using PHP. XML (eXtensible Markup Language) is a versatile text-based markup language designed for both human readability and machine parsing. It's commonly used for data storage an

JWT is an open standard based on JSON, used to securely transmit information between parties, mainly for identity authentication and information exchange. 1. JWT consists of three parts: Header, Payload and Signature. 2. The working principle of JWT includes three steps: generating JWT, verifying JWT and parsing Payload. 3. When using JWT for authentication in PHP, JWT can be generated and verified, and user role and permission information can be included in advanced usage. 4. Common errors include signature verification failure, token expiration, and payload oversized. Debugging skills include using debugging tools and logging. 5. Performance optimization and best practices include using appropriate signature algorithms, setting validity periods reasonably,

A string is a sequence of characters, including letters, numbers, and symbols. This tutorial will learn how to calculate the number of vowels in a given string in PHP using different methods. The vowels in English are a, e, i, o, u, and they can be uppercase or lowercase. What is a vowel? Vowels are alphabetic characters that represent a specific pronunciation. There are five vowels in English, including uppercase and lowercase: a, e, i, o, u Example 1 Input: String = "Tutorialspoint" Output: 6 explain The vowels in the string "Tutorialspoint" are u, o, i, a, o, i. There are 6 yuan in total

Static binding (static::) implements late static binding (LSB) in PHP, allowing calling classes to be referenced in static contexts rather than defining classes. 1) The parsing process is performed at runtime, 2) Look up the call class in the inheritance relationship, 3) It may bring performance overhead.

What are the magic methods of PHP? PHP's magic methods include: 1.\_\_construct, used to initialize objects; 2.\_\_destruct, used to clean up resources; 3.\_\_call, handle non-existent method calls; 4.\_\_get, implement dynamic attribute access; 5.\_\_set, implement dynamic attribute settings. These methods are automatically called in certain situations, improving code flexibility and efficiency.
