1. Aufteilung der Codestruktur:
<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. Startseite anfordern
2.1 Beispiel für einen Homepage-Parameter anfordern (request 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 Einheitlicher Anforderungscode für die Homepage
<?<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 Framework-Code
<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 Initialisierungspfadkonstanten
<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 Konfigurationsdatei laden
<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 Initialisierungsverteilungsparameter
<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> }
Der obige Code verwendet die anfängliche Ladekonfigurationsdatei, um die Standardanforderung zu initialisieren. Wenn Sie „localhost/index.php“ ohne Parameter direkt anfordern, werden die Systemstandardparameter geladen
2.3.4 Plattformbezogene Pfadkonstanten initialisieren
<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 Automatische Lademethode für die Registrierung
<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 Anforderungsverteilung
<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 Wenn wir localhost/index.php anfordern, entspricht dies dem Anfordern von localhost/index.php?p=front&c=shop&a=index und der anschließenden Initialisierung von
Der ShopController-Controller unter applicationcontrollerfront, die Anforderungsaktion ist indexAction
Der indexAction-Code lautet wie folgt:
<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>
Was erklärt werden muss, ist:
1. ShopController erbt von PlatformController und der Plattform-Controller erbt von der Basis-Controller-Klasse: Controller
Die Beziehung ist wie folgt:
2. Nach der Festlegung der Kontrollaktion in MVC besteht der nächste Schritt darin, das Modell zu implementieren
$model_cat = <span>new</span><span> CatModel; ——》 便是实例化catModel类 $cat_list </span>= $model_cat->getNestedList(); ——》取得所有前台分类
3. Im Basismodell sind alle grundlegenden Operationsdatenbankmethoden gekapselt, darunter die getNestedLIst-Methode wie folgt
<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. Die getList-Methode lautet wie folgt
<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. Nachdem das Modell implementiert wurde, laden Sie die Ansicht
<span>//</span><span>载入前台首页模板</span> require CUR_VIE_PATH . <span>'</span><span>index.html</span><span>'</span>;
2.3.6 Zusammenfassung: Um eine Funktion zu implementieren, bestimmen Sie zuerst das Steuerelement, implementieren Sie dann das Modell und laden Sie schließlich die Ansicht
2.3.7-Renderings werden nicht auf der Titelseite erklärt
Das Obige stellt eine Zusammenfassung des Store-MVC-Frameworks im PHP-Projekt (1) vor, einschließlich Aspekten des Inhalts. Ich hoffe, dass es für Freunde hilfreich sein wird, die sich für PHP-Tutorials interessieren.