## 說明
>[info]#### 控制器,主要是對操作進行處理,并不進行任何數據操作,邏輯處理。
在這之前,我們有兩個文件的代碼是需要先寫好的。
>[info] 一個是在控制器文件夾里面的 ```Common.php```,這是用來,檢測當前域里面是否有 Seesion,
有的話就有進入 index界面的權限,沒有的話,就是跳轉到登錄頁面,這是一種安全考慮。
位置如圖(兩個文件都需要創建并且放入指定目錄):

代碼如下:
```
<?php
/**
* Created by PhpStorm.
* User: ye21st
* Email: ye21st@gmail.com
* Date: 2018/1/19
* Time: 11:52
*/
namespace app\index\controller;
use think\Controller;
/**
* 公共控制器
* Class Common
* @package app\index\controller
*/
class Common extends Controller
{
// 前置方法
protected function initialize()
{
if(!session('id') || !session('name')){
$this->error('您尚未登錄系統',url('index/login/index'));
}
}
}
```
>[info] 另一個就是一個返回碼,控制器通過得到的返回碼去進行一些相應的操作。
代碼如下:
```
<?php
/**
* Created by PhpStorm.
* User: ye21st
* Email: ye21st@gmail.com
* Date: 2018/1/17
* Time: 14:10
*/
namespace app\index\controller;
/**
* 返回碼
* Class ResultCode
* @package app\index\controller
*/
class ResultCode
{
static public $LOGIN_SUCCESS = 1000; // 登錄成功
static public $USER_DOES_NOT_EXIST = 1001; // 用戶名不存在
static public $PASSWORD_ERROR = 1002; // 密碼錯誤
}
```
>[success] 到了這里,我們在登錄操作之前,我們先創建好首頁的控制器,用來展示首頁。
位置如下(application\index\controller\Index.php),如下圖所示:

代碼如下:
```
<?php
namespace app\index\controller;
/**
* Index 控制器
* Class Index
* @package app\index\controller
*/
class Index extends Common
{
/**
* 登錄首頁
* @return mixed
*/
public function index()
{
$this->assign('name', 'thinkphp');
return $this->fetch();
}
}
```
>[info] 最后,我們來創建登錄控制器。
位置如下(application\index\controller\Login.php),如下圖所示:

代碼如下:
```
<?php
/**
* Created by PhpStorm.
* User: ye21st
* Email: ye21st@gmail.com
* Date: 2018/1/19
* Time: 11:52
*/
namespace app\index\controller;
use app\index\model\User as UserModel;
use think\captcha\Captcha;
use think\Controller;
use think\facade\Request;
use think\facade\Session;
/**
* 登錄控制器
* Class Login
* @package app\index\controller
*/
class Login extends Controller
{
/**
* 登錄操作
* @return mixed
* @throws \think\db\exception\DataNotFoundException
* @throws \think\db\exception\ModelNotFoundException
* @throws \think\exception\DbException
*/
public function index(){
// 判斷請求是否是 POST 請求
if ( Request::isPost() ){
// 獲取用戶登錄時候的用戶名、密碼、驗證碼
$username = $this -> request -> param('username');
$password = $this -> request -> param('password');
$code = $this -> request -> param('code');
// 檢測輸入的驗證碼是否正確,$code 為用戶輸入的驗證碼字符串
$captcha = new Captcha();
if( !$captcha->check($code))
{
$this->error('驗證碼錯誤!');
}
$index = new UserModel();
$result = $index -> login($username,$password);
/**
* 通過獲得的條件去進行不同的操作
*/
switch ($result){
case ResultCode::$LOGIN_SUCCESS:
$this -> success('用戶登錄成功!',url('index/index/index'));
break;
case ResultCode::$USER_DOES_NOT_EXIST:
$this->error('用戶名不存在!');
break;
case ResultCode::$PASSWORD_ERROR:
$this->error('密碼錯誤,請確認后再次輸入!');
break;
}
}
return $this->fetch();
}
/**
* 生成驗證碼
* @return \think\Response
*/
public function verify()
{
// 驗證碼配置
$config = [
// 驗證碼字體大小
'fontSize' => 20,
// 驗證碼位數
'length' => 4,
// 寬度
'imageW' => 360,
// 高度
'imageH' => 60,
// 關閉驗證碼雜點
'useNoise' => false,
];
$captcha = new Captcha($config);
return $captcha->entry();
}
/**
* 安全退出
*/
public function logout(){
Session::pull('id');
Session::pull('name');
$this->redirect('index/login/index');
}
}
```
>[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)源碼下載