thinkphp5框架一小时搭建一个php后端(1)
開發(fā)環(huán)境使用phpstudy
編輯器用sublime
數(shù)據(jù)庫navicat
需要下載composer
先配置好本地域名,然后需要我們將資源引入到項目里面
下載地址www.layui.com.
layui框架有很多我們后臺開發(fā)需要的控件,幫助我們高效完成后臺搭建。
先創(chuàng)建我們的入口文件admins.php,接著我們在application里面建立一個admins的目錄。
接著我們需要創(chuàng)建登錄需要用到的控制器。
Account.php
<?php
namespace app\admins\controller;
use think\Controller;
use Util\data\Sysdb;
/**
*
*/
class Account extends Controller
{public function login(){return $this->fetch();}// 管理員登錄public function dologin(){$username = trim(input('post.username'));$pwd = trim(input('post.pwd'));$verifycode = trim(input('post.verifycode'));if($username == ''){exit(json_encode(array('code'=>1,'msg'=>'用戶名不能為空')));}if($pwd == ''){exit(json_encode(array('code'=>1,'msg'=>'密碼不能為空')));}if($verifycode == ''){exit(json_encode(array('code'=>1,'msg'=>'請輸入驗證碼')));}// 驗證驗證碼if(!captcha_check($verifycode)){exit(json_encode(array('code'=>1,'msg'=>'驗證碼錯誤')));}// 驗證用戶$this->db = new Sysdb;$admin = $this->db->table('admins')->where(array('username'=>$username))->item();if(!$admin){exit(json_encode(array('code'=>1,'msg'=>'用戶不存在')));}if(md5($admin['username'].$pwd) != $admin['password']){exit(json_encode(array('code'=>1,'msg'=>'密碼錯誤')));}if($admin['status'] == 1){exit(json_encode(array('code'=>1,'msg'=>'用戶已被禁用')));}// 設(shè)置用戶sessionsession('admin',$admin);exit(json_encode(array('code'=>0,'msg'=>'登錄成功')));}public function logout(){session('admin',null);exit(json_encode(array('code'=>0,'msg'=>'退出成功')));}
}
下面我們寫登錄頁面
?先建一個view文件夾,里面建一個account。放login.html
<!DOCTYPE html> <html> <head><title>登錄</title><link rel="stylesheet" type="text/css" href="__STATIC__/plugins/layui/css/layui.css"><script type="text/javascript" src="__STATIC__/plugins/layui/layui.js"></script> </head> <body style="background: #1E9FFF"><div style="position: absolute; left:50%;top:50%;width: 500px;margin-left: -250px;margin-top: -200px;"><div style="background: #ffffff;padding: 20px;border-radius: 4px;box-shadow: 5px 5px 20px #444444;"><div class="layui-form"><div class="layui-form-item" style="color:gray;"><h2>后臺管理系統(tǒng)</h2></div><hr><div class="layui-form-item"><label class="layui-form-label">用戶名</label><div class="layui-input-block"><input type="text" id="username" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">密 碼</label><div class="layui-input-block"><input type="password" id="password" class="layui-input"></div></div><div class="layui-form-item"><label class="layui-form-label">驗證碼</label><div class="layui-input-inline"><input type="text" id="verifycode" class="layui-input"></div><img src="{:captcha_src()}" id="img" onclick="reloadImg()"></div><div class="layui-form-item"><div class="layui-input-block"><button class="layui-btn" onclick="dologin()">登錄</button></div></div></div></div></div><script type="text/javascript">layui.use(['layer'],function(){$ = layui.jquery;layer = layui.layer;// 用戶名控件獲取焦點$('#username').focus();// 回車登錄$('input').keydown(function(e){if(e.keyCode == 13){dologin();}});});// 重新生成驗證碼function reloadImg(){$('#img').attr('src','{:captcha_src()}?rand='+Math.random());}// 登錄function dologin(){var username = $.trim($('#username').val());var pwd = $.trim($('#password').val());var verifycode = $.trim($('#verifycode').val());if(username == ''){layer.alert('請輸入用戶名',{icon:2});return;}if(pwd == ''){layer.alert('請輸入密碼',{icon:2});return;}if(verifycode==''){layer.alert('請輸入驗證碼',{icon:2});return;}$.post('/admins.php/admins/Account/dologin',{'username':username,'pwd':pwd,'verifycode':verifycode},function(res){if(res.code>0){reloadImg();layer.alert(res.msg,{icon:2});}else{layer.msg(res.msg);setTimeout(function(){window.location.href = '/admins.php/admins/Home/index'},1000);}},'json');}</script> </body> </html>
?按照自己的喜好設(shè)計,框架網(wǎng)里面有樣式。
接著需要我們創(chuàng)建管理員數(shù)據(jù)庫
接著封裝數(shù)據(jù)庫訪問類
建好如圖所示的文件夾,編輯Sysdb.php
<?php
namespace Util\data;
use think\Db;class Sysdb{// 指定表名public function table($table){$this->where = array();$this->field = '*';$this->order = '';$this->table = $table;return $this;}// 指定查詢字段public function field($field = '*'){$this->field = $field;return $this;}// 排序public function order($order){$this->order = $order;return $this;}// 指定查詢條件public function where($where = array()){$this->where = $where;return $this;}// 返回一條記錄public function item(){$item = Db::name($this->table)->field($this->field)->where($this->where)->find();return $item ? $item : false;}// 返回listpublic function lists(){$query = Db::name($this->table)->field($this->field)->where($this->where);$this->order && $query = $query->order($this->order);$lists = $query->select();return $lists ? $lists : false;}// 自定義索引列表public function cates($index){$query = Db::name($this->table)->field($this->field)->where($this->where);$this->order && $query = $query->order($this->order);$lists = $query->select();if(!$lists){return false;}$results = [];foreach ($lists as $key => $value) {$results[$value[$index]] = $value;}return $results;}// 分頁public function pages($pageSize = 10){$total = Db::name($this->table)->where($this->where)->count();$query = Db::name($this->table)->field($this->field)->where($this->where);$this->order && $query = $query->order($this->order);$data = $query->paginate($pageSize,$total);return array('total'=>$total,'lists'=>$data->items(),'pages'=>$data->render());}// 添加public function insert($data){$res = Db::name($this->table)->insert($data);return $res;}// 修改public function update($data){$res = Db::name($this->table)->where($this->where)->update($data);return $res;}// 刪除public function delete(){$res = Db::name($this->table)->where($this->where)->delete();return $res;}}
最后需要我們需要進(jìn)行登錄驗證,這里我們需要使用composer。
在config.php里面添加配置
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 http://thinkphp.cn All rights reserved.
// +----------------------------------------------------------------------
// | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail.com>
// +----------------------------------------------------------------------return [// +----------------------------------------------------------------------// | 應(yīng)用設(shè)置// +----------------------------------------------------------------------// 應(yīng)用調(diào)試模式'app_debug' => true,// 應(yīng)用Trace'app_trace' => false,// 應(yīng)用模式狀態(tài)'app_status' => '',// 是否支持多模塊'app_multi_module' => true,// 入口自動綁定模塊'auto_bind_module' => false,// 注冊的根命名空間'root_namespace' => [],// 擴(kuò)展函數(shù)文件'extra_file_list' => [THINK_PATH . 'helper' . EXT],// 默認(rèn)輸出類型'default_return_type' => 'html',// 默認(rèn)AJAX 數(shù)據(jù)返回格式,可選json xml ...'default_ajax_return' => 'json',// 默認(rèn)JSONP格式返回的處理方法'default_jsonp_handler' => 'jsonpReturn',// 默認(rèn)JSONP處理方法'var_jsonp_handler' => 'callback',// 默認(rèn)時區(qū)'default_timezone' => 'PRC',// 是否開啟多語言'lang_switch_on' => false,// 默認(rèn)全局過濾方法 用逗號分隔多個'default_filter' => '',// 默認(rèn)語言'default_lang' => 'zh-cn',// 應(yīng)用類庫后綴'class_suffix' => false,// 控制器類后綴'controller_suffix' => false,// +----------------------------------------------------------------------// | 模塊設(shè)置// +----------------------------------------------------------------------// 默認(rèn)模塊名'default_module' => 'index',// 禁止訪問模塊'deny_module_list' => ['common'],// 默認(rèn)控制器名'default_controller' => 'Index',// 默認(rèn)操作名'default_action' => 'index',// 默認(rèn)驗證器'default_validate' => '',// 默認(rèn)的空控制器名'empty_controller' => 'Error',// 操作方法后綴'action_suffix' => '',// 自動搜索控制器'controller_auto_search' => false,// +----------------------------------------------------------------------// | URL設(shè)置// +----------------------------------------------------------------------// PATHINFO變量名 用于兼容模式'var_pathinfo' => 's',// 兼容PATH_INFO獲取'pathinfo_fetch' => ['ORIG_PATH_INFO', 'REDIRECT_PATH_INFO', 'REDIRECT_URL'],// pathinfo分隔符'pathinfo_depr' => '/',// URL偽靜態(tài)后綴'url_html_suffix' => 'html',// URL普通方式參數(shù) 用于自動生成'url_common_param' => false,// URL參數(shù)方式 0 按名稱成對解析 1 按順序解析'url_param_type' => 0,// 是否開啟路由'url_route_on' => true,// 路由使用完整匹配'route_complete_match' => false,// 路由配置文件(支持配置多個)'route_config_file' => ['route'],// 是否強(qiáng)制使用路由'url_route_must' => false,// 域名部署'url_domain_deploy' => false,// 域名根,如thinkphp.cn'url_domain_root' => '',// 是否自動轉(zhuǎn)換URL中的控制器和操作名'url_convert' => true,// 默認(rèn)的訪問控制器層'url_controller_layer' => 'controller',// 表單請求類型偽裝變量'var_method' => '_method',// 表單ajax偽裝變量'var_ajax' => '_ajax',// 表單pjax偽裝變量'var_pjax' => '_pjax',// 是否開啟請求緩存 true自動緩存 支持設(shè)置請求緩存規(guī)則'request_cache' => false,// 請求緩存有效期'request_cache_expire' => null,// 全局請求緩存排除規(guī)則'request_cache_except' => [],// +----------------------------------------------------------------------// | 模板設(shè)置// +----------------------------------------------------------------------'template' => [// 模板引擎類型 支持 php think 支持?jǐn)U展'type' => 'Think',// 模板路徑'view_path' => '',// 模板后綴'view_suffix' => 'html',// 模板文件名分隔符'view_depr' => DS,// 模板引擎普通標(biāo)簽開始標(biāo)記'tpl_begin' => '{',// 模板引擎普通標(biāo)簽結(jié)束標(biāo)記'tpl_end' => '}',// 標(biāo)簽庫標(biāo)簽開始標(biāo)記'taglib_begin' => '{',// 標(biāo)簽庫標(biāo)簽結(jié)束標(biāo)記'taglib_end' => '}',],// 視圖輸出字符串內(nèi)容替換'view_replace_str' => [],// 默認(rèn)跳轉(zhuǎn)頁面對應(yīng)的模板文件'dispatch_success_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl','dispatch_error_tmpl' => THINK_PATH . 'tpl' . DS . 'dispatch_jump.tpl',// +----------------------------------------------------------------------// | 異常及錯誤設(shè)置// +----------------------------------------------------------------------// 異常頁面的模板文件'exception_tmpl' => THINK_PATH . 'tpl' . DS . 'think_exception.tpl',// 錯誤顯示信息,非調(diào)試模式有效'error_message' => '頁面錯誤!請稍后再試~',// 顯示錯誤信息'show_error_msg' => false,// 異常處理handle類 留空使用 \think\exception\Handle'exception_handle' => '',// +----------------------------------------------------------------------// | 日志設(shè)置// +----------------------------------------------------------------------'log' => [// 日志記錄方式,內(nèi)置 file socket 支持?jǐn)U展'type' => 'File',// 日志保存目錄'path' => LOG_PATH,// 日志記錄級別'level' => [],],// +----------------------------------------------------------------------// | Trace設(shè)置 開啟 app_trace 后 有效// +----------------------------------------------------------------------'trace' => [// 內(nèi)置Html Console 支持?jǐn)U展'type' => 'Html',],// +----------------------------------------------------------------------// | 緩存設(shè)置// +----------------------------------------------------------------------'cache' => [// 驅(qū)動方式'type' => 'File',// 緩存保存目錄'path' => CACHE_PATH,// 緩存前綴'prefix' => '',// 緩存有效期 0表示永久緩存'expire' => 0,],// +----------------------------------------------------------------------// | 會話設(shè)置// +----------------------------------------------------------------------'session' => ['id' => '',// SESSION_ID的提交變量,解決flash上傳跨域'var_session_id' => '',// SESSION 前綴'prefix' => 'think',// 驅(qū)動方式 支持redis memcache memcached'type' => '',// 是否自動開啟 SESSION'auto_start' => true,],// +----------------------------------------------------------------------// | Cookie設(shè)置// +----------------------------------------------------------------------'cookie' => [// cookie 名稱前綴'prefix' => '',// cookie 保存時間'expire' => 0,// cookie 保存路徑'path' => '/',// cookie 有效域名'domain' => '',// cookie 啟用安全傳輸'secure' => false,// httponly設(shè)置'httponly' => '',// 是否使用 setcookie'setcookie' => true,],//分頁配置'paginate' => ['type' => 'bootstrap','var_page' => 'page','list_rows' => 15,],// 驗證碼配置'captcha' => [// 驗證碼的字符集'codeSet' => '23456789abcdefhijkmnpqrstuvwxyzABCDEFHJKMNPQRSTUVWXYZ',// 設(shè)置驗證碼字體大小'fontSize' => 18,// 添加混淆曲線'useCurve' => false,// 設(shè)置圖片的高度、寬度'imageW' => 150,'imageH' => 35,// 驗證碼位數(shù)'length' =>4,// 驗證成功后重置'reset' =>true],
];
接著為了防止非法用戶訪問
controller里面新建home.php ,BaseAdmin.php
home.php
<?php
namespace app\admins\controller;
use think\Controller;
use Util\data\Sysdb;/**
* 后臺首頁
*/
class Home extends BaseAdmin
{public function index(){$menus = false;$role = $this->db->table('admin_groups')->where(array('gid'=>$this->_admin['gid']))->item();if($role){$role['rights'] = (isset($role['rights']) && $role['rights']) ? json_decode($role['rights'],true) : [];}if($role['rights']){$where = 'mid in('.implode(',',$role['rights']).') and ishidden=0 and status=0';$menus = $this->db->table('admin_menus')->where($where)->cates('mid');$menus && $menus = $this->gettreeitems($menus);}$site = $this->db->table('sites')->where(array('names'=>'site'))->item();$site && $site['values'] = json_decode($site['values']);$this->assign('site',$site);$this->assign('role',$role);$this->assign('menus',$menus);return $this->fetch();}private function gettreeitems($items){$tree = array();foreach ($items as $item) {if(isset($items[$item['pid']])){$items[$item['pid']]['children'][] = &$items[$item['mid']];}else{$tree[] = &$items[$item['mid']];}}return $tree;}// 歡迎頁面public function welcome(){return $this->fetch();}
}
BaseAdmin.php?
<?php
namespace app\admins\controller;
use think\Controller;
use Util\data\Sysdb;/**
*
*/
class BaseAdmin extends Controller
{public function __construct(){parent::__construct();$this->_admin = session('admin');// 未登錄的用戶不允許訪問if(!$this->_admin){header('Location: /admins.php/admins/Account/login');exit;}$this->assign('admin',$this->_admin);// 判斷用戶是否有權(quán)限$this->db = new Sysdb;}
}
登錄部分完結(jié)
下面是對后臺界面進(jìn)行編寫
寫兩個
index.html
<!DOCTYPE html>
<html>
<head><title></title><link rel="stylesheet" type="text/css" href="__STATIC__/plugins/layui/css/layui.css"><script type="text/javascript" src="__STATIC__/plugins/layui/layui.js"></script><style type="text/css">.header{width:100%;height: 50px;line-height: 50px;background: #2e6da4;color:#ffffff;}.title{margin-left: 20px;font-size: 20px;}.userinfo{float: right;margin-right: 10px;}.userinfo a{color:#ffffff;}.menu{width: 200px;background: #333744;position: absolute;}.main{position: absolute;left: 200px;right: 0px;}.layui-collapse{border: none;}.layui-colla-item{border-top: none;}.layui-colla-title{background: #42485b;color:#ffffff;}.layui-colla-content{border-top: none;padding: 0px;}</style>
</head>
<body><!--header--><div class="header"><span class="title"><span style="font-size: 12px;">{$site.values}</span>-后臺管理系統(tǒng)</span><span class="userinfo">{$admin.username}【{$role.title}】<span><a href="javascript:;" onclick="logout()">退出</a></span></span></div><!--菜單--><div class="menu" id="menu"><div class="layui-collapse" lay-accordion>{volist name="menus" id="vo"}<div class="layui-colla-item"><h2 class="layui-colla-title">{$vo.title}</h2><div class="layui-colla-content{$i==1?' layui-show':''}"><?php if(isset($vo['children']) && $vo['children']){?><ul class="layui-nav layui-nav-tree" lay-filter="test">{volist name="vo.children" id="cvo"}<li class="layui-nav-item"><a href="javascript:;" onclick="menuFire(this)" src="/admins.php/admins/{$cvo.controller}/{$cvo.method}">{$cvo.title}</a></li>{/volist}</ul><?php }?></div></div>{/volist}</div></div><!--主操作頁面--><div class="main"><iframe src="/admins.php/admins/Home/welcome" onload="resetMainHeight(this)" style="width: 100%;height: 100%;" frameborder="0" scrolling="0"></iframe></div><script>layui.use(['element','layer'], function(){var element = layui.element;$ = layui.jquery;layer = layui.layer;resetMenuHeight();});// 重新設(shè)置菜單容器高度function resetMenuHeight(){var height = document.documentElement.clientHeight - 50;$('#menu').height(height);}// 重新設(shè)置主操作頁面高度function resetMainHeight(obj){var height = parent.document.documentElement.clientHeight - 53;$(obj).parent('div').height(height);}// 菜單點擊function menuFire(obj){// 獲取urlvar src = $(obj).attr('src');// 設(shè)置iframe的src$('iframe').attr('src',src);}// 退出function logout(){layer.confirm('確定要刪除嗎?', {btn: ['確定','取消']}, function(){$.get('/admins.php/admins/account/logout',function(res){if(res.code>0){layer.msg(res.msg,{'icon':2});}else{layer.msg(res.msg,{'icon':1});setTimeout(function(){window.location.href="/admins.php/admins/account/login";},1000);}},'json');});}
</script>
</body>
</html>
welcome.html
<!DOCTYPE html>
<html>
<head><title></title>
</head>
<body><div style="text-align: center;color:gray;font-size: 20px;"><h1>歡迎使用后臺管理系統(tǒng)</h1></div>
</body>
</html>
第一階段完成?
Thinkphp框架一小時搭建后端(2)https://blog.csdn.net/kris_yifan/article/details/122727458
總結(jié)
以上是生活随笔為你收集整理的thinkphp5框架一小时搭建一个php后端(1)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 试管婴儿流产率有多少
- 下一篇: 一小时Thinkphp后台(2)