好了,接下来我们手摸手来写一个完整mvc结构文件。
伪静态操作这里就不赘述了;
设计好业务需求所需的数据库结构;
假设我们需要做一个会员投稿(Contribution);
会员投稿流程就是发布文章到指定的栏目,只是一般状态设置成不显示,然后管理员审核后将状态设置为显示;(深入的业务需求请自行涉及补充)
文件创建路径: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
文件创建路径: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('{pboot:pagetitle}', '我的文章列表', $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文件,该文件即为我的文章列表功能所对应的视图文件。
后端的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');
}
}
文章评论(审核通过可见)