## 说明 >[info]#### 控制器,主要是对操作进行处理,并不进行任何数据操作,逻辑处理。 在这之前,我们有两个文件的代码是需要先写好的。 >[info] 一个是在控制器文件夹里面的 ```Common.php```,这是用来,检测当前域里面是否有 Seesion, 有的话就有进入 index界面的权限,没有的话,就是跳转到登录页面,这是一种安全考虑。 位置如图(两个文件都需要创建并且放入指定目录): ![](https://box.kancloud.cn/6e6c566445043f83155ba433b5891ee5_402x383.png) 代码如下: ``` <?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),如下图所示: ![](https://box.kancloud.cn/1a922f8b2758cef7c7e24ebadf830962_380x226.png) 代码如下: ``` <?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),如下图所示: ![](https://box.kancloud.cn/ee2b5bfb139efec24f3d1a2ec31d04c1_376x221.png) 代码如下: ``` <?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] 到了这里,我们的代码基本都书写完了,功能的话,也是能够正常使用的。