PHP框架开发:三、MVC设计模式及本框架的实现方式

MVC

本教程实践性的,对于MVC的知识只是简略介绍,如想深入学习,请自行查找资料。

MVC 简单说来包括三部分:M – Model (模型) 、V – View (视图)、C – Controller (控制器) 。看过上篇文章的朋友应该知道我们最后提到的LQP_Rewrite类中的三个属性中有个叫:$_controllerName,没错这里就是指MVC中C的名称。MVC设计模式把应用程序的结构清晰的划分成了三部分,因此我们的框架也用了专门的文件夹与这三部分进行对应,在介绍前先让我们把缺少的另外三个文件夹建立起来:

  • 展开application文件夹,在其下分别创建controllers、models与views文件夹

好了,现在让我们看一下对应关系就非常明了了:

image

白话说下MVC各部分的作用:

  • M:一般用于为数据库中的表建立对应的PHP类(被称作ORM),并提供操作数据库的各种方法,方便C的调用,同时也使C不用考滤数据库,更专注于处理业务逻辑(指各种流程,比如常见的购物车:选产品->下单->付款->发货),易于代码维护;
  • C:用于处理业务逻辑了,控制器,顾名思义用于控制,所于的用户请求都由控制器掌控,最一般的应用就是指定视图V,一般每个控制器可以包含多个动作(Action),每个动作对应一个视图,控制器就是通过动作来控制视图的;
  • V:就是用来处理显示的了,用户能看到的东西应该都在这里,我们常说的“代码与视图分离”中的视图与这里的视图是基本一致的,都是为了只显示,方便程序员与美工配合工作,也使程序更易于理解与维护。

实现方式

本框架中,我们采用如上图的结构来组织MVC各部分,并定义如下常量来指定各部分的位置,

LQP_LIB_DIR :定义库位置
PRJECT_DIR :定义项目位置
APP_CONTROLLER_DIR :定义控制器位置
APP_VIEW_DIR :定义视图位置
APP_MODEL_DIR :定义模块位置

  • 在public下创建config文件夹,在config下新增文lib_config.php,用于配置框架可能需要的所有配置,目前内容如下:
  • <?php
    define('LQP_LIB_DIR', 'E:/code/projects/LoveQiPai/WWW/library');//库位置
    set_include_path(LQP_LIB_DIR.";.");//设置php包含路径
    ?>
  • 修改public/config/config.php中的内容为如下:(注:PROJECT_DIR要修改为你的项目在你磁盘上的位置)
<?php
include 'lib_config.php';

define('PROJECT_DIR', 'C:\Users\z\Documents\NetBeansProjects\LQP_Framework');//项目位置,TODO:修改为你项目的实际位置

define('APP_CONTROLLER_DIR', PROJECT_DIR.'\application\controllers');//控制器位置
define('APP_VIEW_DIR', PROJECT_DIR.'\LQP_Framework\application\views');//视图位置
define('APP_MODEL_DIR' , PROJECT_DIR.'\application\models');//models位置

?>

只所以定义上面这些常量是为了对项目更多的控制权,比如,你可以把controller放在app中,而不是application中,当然你也可以使用“约定胜于配置”的方式,把APP_CONTROLLER_DIR 、APP_VIEW_DIR 及APP_MODEL_DIR 定义在你的框架代码中。

另外,PROJECT_DIR的位置一般也可以通过当前文件的路径推导出来,这个我们日后再讨论。

下一节我们继续通过分析URL来实现简单的Controller功能,让“代码与设计分离”。

本节代码:http://cid-8248e4adbf2b92f3.office.live.com/self.aspx/.Public/Lesson%203.rar

原文地址:https://www.cnblogs.com/XiaoG/p/1823603.html