## 控制器
控制器主要是用來處理一些頁面的跳轉以及一些邏輯的判斷,不涉及到數據處理,功能都是調用模型類的方法來實現的。
## 控制器開發
控制器一共有三個,分別是:首頁控制器、欄目控制器、公共部分的控制器。
>[info] 首頁控制器
1、位置位于:```application\index\controller\Index.php```
2、位置如圖所示:

3、代碼如下:
```
<?php
namespace app\index\controller;
use think\Controller;
/**
* 首頁控制器
* Class Index
* @package app\index\controller
*/
class Index extends Controller
{
/**
* 顯示首頁
*/
public function index()
{
return $this->fetch();
}
}
```
>[info] 欄目控制器
1、位置位于:```application\index\controller\Cate.php```
2、位置如圖所示:

3、代碼如下:
```
<?php
/**
* Created by PhpStorm.
* User: ye21st
* Email: ye21st@gmail.com
* Date: 2018/1/23
* Time: 16:33
*/
namespace app\index\controller;
use think\Controller;
use app\index\model\Cate as CateModel;
use think\facade\Request;
/**
* 欄目控制器
* Class Cate
* @package app\index\controller
*/
class Cate extends Controller
{
/**
* 控制器的前置操作
* @var array
*/
protected $beforeActionList = [
'delsoncate' => ['only' => 'del'],
];
/**
* 欄目列表頁面顯示數據 - 以及,排序功能的寫法
* @return mixed|void
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function lst()
{
// 實例化模型
$cate = new CateModel();
// 判斷是否是POST提交數據
if ($this->request->isPost()) {
// 獲取post提交過來的數據
$sorts = Request::post();
// 通過ID循環更新排序的值
foreach ($sorts as $k => $v) {
$cate->update(['id' => $k, 'sort' => $v]);
}
$this->success('更新排序成功!', url('index/cate/lst'));
return;
}
// 調用模型的 catetree 拿到數據
$cateres = $cate->catetree();
// 對頁面進行賦值
$this->assign('cateres', $cateres);
return $this->fetch();
}
public function add()
{
// 實例化模型
$cate = new CateModel();
// 判斷是否是POST提交數據
if ($this->request->isPost()) {
// 獲得post提交過來的數據
$data = Request::post();
// 實例化驗證器
$validate = new \app\index\validate\Cate;
// 驗證器驗證
if (!$validate->scene('add')->check($data)) {
$this->error($validate->getError());
}
// 數據添加 返回 1 或者 0
$add = $cate->save($data);
if ($add) {
$this->success('添加欄目成功!', url('index/cate/lst'));
} else {
$this->error('添加欄目失敗!');
}
}
// 調用模型的 catetree 拿到數據
$cateres = $cate->catetree();
// 對頁面進行賦值
$this->assign('cateres', $cateres);
return $this->fetch();
}
public function edit()
{
// 實例化模型
$cate = new CateModel();
// 判斷是否是post提交的數據
if ($this->request->isPost()) {
// 獲取POST提交的數據
$data = Request::post();
// 實例化驗證器
$validate = new \app\index\validate\Cate;
// 通過驗證器去判斷數據是否合法
if (!$validate->scene('edit')->check($data)) {
$this->error($validate->getError());
}
// 通過ID修改相應的數據
$save = $cate->save($data, ['id' => $data['id']]);
if ($save !== false) {
$this->success('修改欄目成功!', url('index/cate/lst'));
} else {
$this->error('修改欄目失敗!');
}
return;
}
$cates = $cate -> find(Request::param('id'));
// 調用自定義模型里面的樹方法
$cateres = $cate->catetree();
// 模板賦值
$this->assign(array(
'cateres' => $cateres,
'cates' => $cates,
));
return $this->fetch();
}
/**
* 欄目刪除操作
* @throws \think\exception\DbException
*/
public function del()
{
// 通過ID去進行數據的刪除
$del = CateModel::get(Request::param('id'));
$bool = $del->delete();
if ($bool) {
$this->success('刪除欄目成功!', url('index/cate/lst'));
} else {
$this->error('刪除欄目失敗!');
}
}
/**
* 通過要刪除的欄目ID,去循環查出,該欄目下面的子目錄,全部刪除。
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function delsoncate()
{
// 要刪除的當前欄目的id
$cateid = Request::param('id');
// 實例化模型
$cate = new CateModel();
// 調用模型里面的調用子欄目方法
$sonids = $cate->getchilrenid($cateid);
// 獲得全部的欄目ID
$allcateid = $sonids;
$allcateid[] = $cateid;
if ($sonids) {
$cate->delete($sonids);
}
}
}
```
>[info] 公共部分控制器
1、位置位于:```application\index\controller\Common.php```
2、位置如圖所示:

3、代碼如下:
```
<?php
/**
* Created by PhpStorm.
* User: ye21st
* Email: ye21st@gmail.com
* Date: 2018/1/23
* Time: 15:36
*/
namespace app\index\controller;
use think\Controller;
/**
* 公共控制器 - 主要用來存放一些公共的頁面,比如,頭部、底部
* Class Common
* @package app\index\controller
*/
class Common extends Controller
{
/**
* 頭部控制器 - 顯示頁面
*/
public function header(){
$this->fetch();
}
/**
* 底部控制器 - 顯示頁面
*/
public function footer(){
$this->fetch();
}
}
```
>[success] 至此,控制器開發也就完成了,到了這里,程序應該就可以正常跑起來了。
- 序言
- 文檔更新狀態
- 錯誤提交
- 零、前期準備
- (1)PHP開發環境
- (2)PHP開發工具
- (3)數據庫相關
- (4)ThinkPHP5.1完全開發手冊
- (5)URL優化
- 一、用戶登錄
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - M(模型)
- (5)MVC - C(控制器)
- (6)源碼下載
- 二、無限極分類
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - M(模型)
- (5)驗證器
- (6)MVC - C(控制器)
- (7)源碼下載
- 三、TP5.1開發API接口,實現前后端分離
- (1)數據表設計
- (2)項目配置
- (3)HTML純靜態頁面
- (4)MVC - M(模型)
- (5)MVC - C(控制器)
- (6)源碼下載
- 四、TP5調用 API 接口
- (1)項目配置
- (2)MVC - V(視圖)
- (3)MVC - C(控制器)
- (4)源碼下載
- 五、文章分頁以及修改分頁樣式
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - M(模型)
- (5)MVC - C(控制器)
- (6)自定義分頁類
- (7)源碼下載
- 六、修改默認跳轉頁面
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - M(模型)
- (5)驗證器
- (6)MVC - C(控制器)
- (7)自定義跳轉頁面
- (8)源碼下載
- 七、整合markdown在線編輯器
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - C(控制器)
- (5)源碼下載
- 八、整合PHPExcel導入導出功能
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - C(控制器)
- (5)源碼下載
- 九、整合Echarts
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - C(控制器)
- (5)源碼下載
- 十、接入AntV G2(可視化圖形)
- (1)數據表設計
- (2)項目配置
- (3)MVC - V(視圖)
- (4)MVC - C(控制器)
- (5)源碼下載