搭建MVC结构

搭建MVC结构(使用MVC设计模式搭建的框架)

MVC: M(model模型) V(view视图) C(control控制)
本MVC模式采用的是单一入口:
如:http://localhost/test/mvc/index.php?m=stu&a=add //打开学生信息的添加界面
其中m的值stu表示访问的是Stucontroller控制器
a的值add表示是访问Stucontrolleradd方法
index.php?m=order&a=del&id=100

通过请求访问了控制层C,C调度M模型获取我们所需的信息数据,然后再去加载V视图将结果整合后响应给我们

使用MVC设计模式搭建的项目结构叫框架

MVC是一个框架模式,它强制性的使应用程序的输入、处理和输出分开

  1. 创建目录:
    ORG 第三方扩展类
    model M(模型)层目录(M)
    controller C(控制)层目录(C)
    view V(视图) 层目录(smarty的模板目录)
    public 公共资源目录
    libs Smarty库(解压到这里即可)
    view_c Smarty模板编译目录(可选)
    cache Smarty静态缓存目录(可选)
    configs 配置文件目录

  2. 将自己写好的model类放到model目录下
    model/model.class.php

  3. ORG目录下创建一个tpl.class.phpsmarty子类,用于初始化smarty
    代码如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    // Smarty信息的初始化类
    class Tpl extends Smarty{
    public function __construct(){
    parent::__construct(); // 构造父类
    // 初始化Smarty对象中属性:
    $this->template_dir = "view"; // smarty模板目录
    $this->compile_dir = "view_c"; // smarty模板编译目录

    $this->config_dir = "configs"; // smarty配置文件目录

    $this->cache_dir = "cache"; // smarty模板静态缓存目录
    // $this->caching = true; // 是否开启静态缓存
    // $this->cache_lifetime = 3600; // 静态缓存时间(秒)

    // 指定定界符
    $this->left_delimiter="{"; // 左定界符
    $this->right_delimiter="}"; // 右定界符
    }
    }
  4. ontroller目录下创建Controller类,继承Tpl类,文件名叫:controller.class.php

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    // Controller的控制基类
    class Controller extends Tpl{
    public function __construct(){
    parent::__construct();
    }

    /**
    *Controller初始化方法(在这个方法里根据参数a的值决定调用对应的方法)
    *
    */
    public function init(){
    // 获取a参数的值
    $a = isset($_GET["a"])?$_GET["a"]:"index"; // 默认值为index
    // 判断当前Controller是否存在此方法
    if(method_exists($this,$a)){
    // 调用此方法
    $this->$a();
    }else{
    die("没有找到{$a}对应的方法");
    }
    }
    }
  5. 在最外层,创建一个index.php的入口文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    <?php
    // 网站的主入口程序
    // 自动加载类
    function __autoload($name){
    $name = strtolower($name); // 转成小写
    if(file_exists("./controller/{$name}.class.php")){
    require("./controller/{$name}.class.php");
    }elseif(file_exists("./model/{$name}.class.php")){
    require("./model/{$name}.class.php");
    }elseif(file_exists("./ORG/{$name}.class.php")){
    require("./ORG/{$name}.class.php");
    }elseif(file_exists("./libs/".ucfirst($name).".class.php")){
    require("./libs/".ucfirst($name).".class.php");
    }elseif(file_exists("./libs/sysplugins/{$name}.php")){
    require("./libs/sysplugins/{$name}.php");
    }else{
    die("错误:没有找到对应{$name}类!");
    }
    }
    // 数据连接配置文件
    require("./configs/config.php");
    // 获取参数m的值,并创建对应的Controller对象
    $mod = isset($_GET['m'])?$_GET['m']:"index";
    // 拼装Controller类名
    $classname = ucfirst($mod)."Controller";
    // 创建对应的Controller对象
    $controller = new $classname();
    // 执行Controller的初始化(Controller入口)
    $controller->init();
  6. configs的目录下创建一个config.php的配置文件

  7. 测试
    7.1. 在Controller目录下创建一个indexcontroller.class.php文件

    1
    2
    3
    4
    5
    6
    7
    8
    // 网站入口的主Controller类
    class IndexController extends Controller{
    // 默认入口方法
    public function index(){
    $this->assign("title","MVC的测试界面");
    $this->display("index.html");
    }
    }

7.2. 在view目录下创建index.html模板页面

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>{$title}</title>
</head>
<body>
<h2>{$title}</h2>
</body>
</html>

打赏

刘伟 wechat
欢迎您扫一扫上面的微信公众号( 或者搜索:darrenliuwei )订阅
如果觉得本文对您有启发,可以随意打赏一点鼓励我继续更新!