后台登录
准备:
- 1、在application目录下创建admin目录,用来存放与后台相关的文件
- 2、创建common(后台公共文件夹)、controller(后台控制器)、view(后台视图)
- 3、在common目录下创建controller来存放公共控制器(Base.php)
入口文件绑定
1、修改配置文件app.php
,auto_bind_module
的值改为true
2、在public目录下创建admin.php
文件名与之前的后台模块名一致(因为这时后台的入口文件,要对应。就比如模块index就对应一个index.php);文件内容赋值index.php
<?php
// [ 应用入口文件 ]
namespace think;
// 加载基础文件
require __DIR__ . '/../thinkphp/base.php';
// 支持事先使用静态方法设置Request对象和Config对象
// 执行应用并响应
Container::get('app')->run()->send();
控制器
在controller目录下创建index.php,在view目录下创建对应的文件,
公共控制器
<?php
namespace app\admin\common\controller;
use think\Controller;
/**
* 后台公共控制器
*/
class Base extends Controller
{
//初始化方法
protected function initialize()
{
}
/**
* 检测用户是否登录
* 1、调用位置,后台入口 admin/index/index()
*/
protected function isLogin()
{
if (!Session::has('admin_id')) {
$this->error('请先登录', "admin/user/login");
}
}
}
入口控制器
<?php
namespace app\admin\controller;
use app\admin\common\controller\Base;
class Index extends Base{
public function index(){
//验证是否登录
$this->isLogin();
return $this->view->fetch('index');
}
}
模型
在common目录下创建model,来存放与后台操作有关的模型
后台用户登录模型
<?php
namespace app\admin\common\model;
use think\Model;
/**
* 后台用户登录模型
*/
class User extends Model
{
//主键
protected $pk = 'id';
//绑定的表
protected $table = 'zh_user';
}
管理员登录
创建管理员控制器User.php
登录验证
//验证后台登录
public function checkLogin()
{
$date = Request::param();
//dump($date);
//查询条件
$map[] = ['email', '=', $date['email']];
$map[] = ['password', '=', sha1($date['password'])];
$res = ModelUser::where($map)->find();
//判断用户是否存在
if ($res) {
Session::set('admin_id', $res['id']);
Session::set('admin_name', $res['name']);
Session::set('admin_power', $res['is_admin']);
$this->success('登录成功', 'admin/index/index');
} else {
$this->error('登录失败,请重试', 'admin/user/login');
}
}
后台模板布局
这里采用模板标签方式布局,基本结构
public/layout.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>{$title|default="标题"}</title>
<link
href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.0/css/bootstrap.css"
rel="stylesheet"
/>
<script src="https://cdn.bootcdn.net/ajax/libs/jquery/1.10.0/jquery.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.0.0/js/bootstrap.js"></script>
</head>
<body>
<div class="container">
<!-- 行1 -->
<div class="row">
<!-- 顶部导航 (固定)-->
<div class="col-md-12">{include file="public/nav" /}</div>
</div>
<!-- 行2 -->
<div class="row">
<!-- 左侧菜单(固定) -->
<div class="col-md-2">{include file="public/leftMenu" /}</div>
<!-- 右侧操作区 -->
<div class="col-md-10">{__CONTENT__}</div>
</div>
</div>
</body>
</html>
在index.html使用模板文件
{layout name="public/layout" /}
<!-- 这里写的任何内容,都会与布局文件中的{__CONTENT__}进行替换 -->