好了,接下来我们手摸手来写一个完整mvc结构文件。

1、前端

1.1、准备工作

伪静态操作这里就不赘述了;

设计好业务需求所需的数据库结构;

假设我们需要做一个会员投稿(Contribution);

会员投稿流程就是发布文章到指定的栏目,只是一般状态设置成不显示,然后管理员审核后将状态设置为显示;(深入的业务需求请自行涉及补充)

1.2、创建模型

文件创建路径:apps/home/model/;在该目录下新建文件:ContributionModel.php

<?php
namespace app\home\model;

use core\basic\Model;

class ContributionModel extends Model{
//具体数据库操作方法请自行处理
}

注意细节:

1、命名空间,前面有提到,app开头,当前应用,一般前端就是home,model结尾

2、引入 Controller 基类,让ContributionModel继承Model


1.3、创建控制器

文件创建路径:apps/home/controller/;在该目录下新建文件:ContributionController.php

<?php
namespace app\home\controller;

use core\basic\Controller;
use app\home\model\ContributionModel;
use core\basic\Url;

class CartController extends Controller
{

    protected $parser;

    protected $model;

    protected $htmldir;

    public function __construct()
    {
        // 未登录时跳转到用户登录
        if (! session('pboot_uid')) {
            location(Url::home('member/login'));
        }
        $this->model = new ContributionModel();
        $this->parser = new ParserController();
        $this->htmldir = $this->config('tpl_html_dir') ? $this->config('tpl_html_dir') . '/' : '';
    }

    public function index(){
        $content = parent::parser($this->htmldir . 'member/article_list.html'); // 框架标签解析
        $content = $this->parser->parserBefore($content); // CMS公共标签前置解析
        $content = str_replace('HelloWord-临沂建站,临沂做网站,临沂网站建设,临沂网站开发-临沂卓群网络', '我的文章列表', $content);
        $content = $this->parser->parserPositionLabel($content, 0, '我的文章列表', Url::home('member/index')); // CMS当前位置标签解析
        $content = $this->parser->parserSpecialPageSortLabel($content, - 4, '我的文章列表', Url::home('member/index')); // 解析分类标签
        $content = $this->parser->parserAfter($content); // CMS公共标签后置解析
        echo $content;
        exit();
    }
    
    //其他功能自行补充,本文主要讲的是如何创建功能模块
}

注意细节:

1、命名空间,前面有提到,app开头,当前应用,一般前端就是home,controller结尾

2、引入 Model 基类,让ContributionController继承Controller

3、引入上一步创建好的ContributionModel模型,在__construct中进行实例化

4、该功能仅登陆后可用,在__construct中加入登陆状态判断

5、在模板文件夹template/default/html/member/中创建article_list.html文件,该文件即为我的文章列表功能所对应的视图文件。


2、后端

后端的MVC架构基本与前端一致,只是需要注意后端路由需要手动写入。

文件地址:apps/common/route.php;打开文件,在该文件中预先写好路由配置。

官方推荐将路由写在config/route.php文件中,升级不会被覆盖。

例如:

// 商城模块
'admin/ShopCategory' => 'admin/shop.ShopCategory',
'admin/Goods' => 'admin/shop.Goods',
'admin/Order' => 'admin/shop.Order',
'admin/Payment' => 'admin/shop.Payment',

我在会员模块下方增加了几个新功能的路由。

另外注意的一个细节就是,后端无需接入parser,直接显示视图文件即可。

例如:

<?php
namespace app\admin\controller\member;

use core\basic\Controller;
use app\admin\model\member\AuditModel;

class AuditController extends Controller
{

    private $model;

    public function __construct()
    {
        $this->model = new AuditModel();
    }

    // 审核列表
    public function index()
    {
        //准备页面所需数据
        ......
        //直接显示模板文件
        $this->display('member/audit.html');
    }
}