php项目中商店mvc框架总结(1),mvc框架_PHP教程
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>
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效果图 前台页面不加以阐述

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds





PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

Si vous êtes un développeur PHP expérimenté, vous aurez peut-être le sentiment d'y être déjà allé et de l'avoir déjà fait. Vous avez développé un nombre important d'applications, débogué des millions de lignes de code et peaufiné de nombreux scripts pour réaliser des opérations.

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

JWT est une norme ouverte basée sur JSON, utilisée pour transmettre en toute sécurité des informations entre les parties, principalement pour l'authentification de l'identité et l'échange d'informations. 1. JWT se compose de trois parties: en-tête, charge utile et signature. 2. Le principe de travail de JWT comprend trois étapes: la génération de JWT, la vérification de la charge utile JWT et l'analyse. 3. Lorsque vous utilisez JWT pour l'authentification en PHP, JWT peut être généré et vérifié, et les informations sur le rôle et l'autorisation des utilisateurs peuvent être incluses dans l'utilisation avancée. 4. Les erreurs courantes incluent une défaillance de vérification de signature, l'expiration des jetons et la charge utile surdimensionnée. Les compétences de débogage incluent l'utilisation des outils de débogage et de l'exploitation forestière. 5. L'optimisation des performances et les meilleures pratiques incluent l'utilisation des algorithmes de signature appropriés, la définition des périodes de validité raisonnablement,

Ce tutoriel montre comment traiter efficacement les documents XML à l'aide de PHP. XML (Language de balisage extensible) est un langage de balisage basé sur le texte polyvalent conçu à la fois pour la lisibilité humaine et l'analyse de la machine. Il est couramment utilisé pour le stockage de données et

Une chaîne est une séquence de caractères, y compris des lettres, des nombres et des symboles. Ce tutoriel apprendra à calculer le nombre de voyelles dans une chaîne donnée en PHP en utilisant différentes méthodes. Les voyelles en anglais sont a, e, i, o, u, et elles peuvent être en majuscules ou en minuscules. Qu'est-ce qu'une voyelle? Les voyelles sont des caractères alphabétiques qui représentent une prononciation spécifique. Il y a cinq voyelles en anglais, y compris les majuscules et les minuscules: a, e, i, o, u Exemple 1 Entrée: String = "TutorialSpoint" Sortie: 6 expliquer Les voyelles dans la chaîne "TutorialSpoint" sont u, o, i, a, o, i. Il y a 6 yuans au total

Liaison statique (statique: :) implémente la liaison statique tardive (LSB) dans PHP, permettant à des classes d'appel d'être référencées dans des contextes statiques plutôt que de définir des classes. 1) Le processus d'analyse est effectué au moment de l'exécution, 2) Recherchez la classe d'appel dans la relation de succession, 3) il peut apporter des frais généraux de performance.

Quelles sont les méthodes magiques de PHP? Les méthodes magiques de PHP incluent: 1. \ _ \ _ Construct, utilisé pour initialiser les objets; 2. \ _ \ _ Destruct, utilisé pour nettoyer les ressources; 3. \ _ \ _ Appel, gérer les appels de méthode inexistants; 4. \ _ \ _ GET, Implémentez l'accès à l'attribut dynamique; 5. \ _ \ _ SET, Implémentez les paramètres d'attribut dynamique. Ces méthodes sont automatiquement appelées dans certaines situations, améliorant la flexibilité et l'efficacité du code.
