好了,接下来我们手摸手来写一个完整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'); } }
文章评论(审核通过可见)